너무 간단한 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의 관점에서 보면 아웃?안전, 안전하다

좋은 웹페이지 즐겨찾기