너무 간단한 WebBrowser(Reactive Cocoa 사용)
2570 단어 SwiftReactiveCocoa
리액티브 코코아를 이해하려면 제넥스와 크로저 등 스위프트의 기본 내용을 잘 이해할 필요가 있는데, 그곳의 지식이 모호하다면 솔직히 어떻게 행동해야 할지 전혀 모르겠다.
이번에도 간단하게 말하면 리턴 키를 누르면 텍스트 필드의 문자열을 ViewModel에 보내고 ViewController는 URL로 변환하여 브라우저에 표시한다.
그러나 문자열이 5자를 넘지 않으면 URL로 변환되지 않는다는 속박이 추가됐다.글자 수가 아니라 URL의 장르를 정리했는지 조사해야 하는데, 일단 제한을 붙이고 싶어 간단했다.
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
self.urlField.delegate = self
self.myWebView.delegate = self
vm.action!.values.observeNext { value in
print(value.absoluteString)
self.myWebView.loadRequest(NSURLRequest(URL: value))
}
let a = self.urlField.rac_signalForControlEvents(.EditingDidEndOnExit)
.toSignalProducer()
.flatMapError{
error in return SignalProducer<AnyObject?, NoError>.empty
}
.map { value -> String in
self.urlField.text!
}
vm.urlText <~ a
cocoaAction = CocoaAction(vm.action, input: self.urlField.text!)
urlField.addTarget(cocoaAction, action: CocoaAction.selector, forControlEvents: .EditingDidEndOnExit)
}
var urlText : MutableProperty<String> = MutableProperty("")
var action : Action<String, NSURL, NSError>!
var validation: MutableProperty<Bool>!
override init() {
super.init()
validation = MutableProperty(false)
urlText.producer.startWithNext { value in
if(value.characters.count > 5){
print("true")
self.validation <~ MutableProperty(true)
}
}
action = Action(enabledIf: validation) { value in
return SignalProducer { (observer, disposable) in
print("action: " + self.urlText.value)
observer.sendNext(NSURL(string: self.urlText.value)!)
observer.sendCompleted()
}
}
}
좀 더 똑똑한 글쓰기가 있어야 할 것 같은데 몰라서 일단 여기까지만 쓰자.소스는 아직 github에 주고 있어.
WebBrowserRCSample
다음은 단지 사족을 그리는 것일 뿐이다
필드의 문자열을 NSURL로만 변환하면 ViewController 내에서 비교적 빠르지만 MVM의 관점에서 보면 아웃?안전, 안전하다
Reference
이 문제에 관하여(너무 간단한 WebBrowser(Reactive Cocoa 사용)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/rnsm504/items/1d785f58820df48b60b2텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)