Navigator则是负责具体跳转的接口。它和Builder的使用方法类似,在配置文件中配置对应的name/code,然后通过register方法注册对应的navigator实现到wireframe中去。框架默认提供了7个常用的跳转方式,比如:present(Animated or Not Animated),push(Animated or Not Animated),如果app的跳转方式比较简单,那么默认的navigators就已经足够满足需求了。下面的代码演示了如果注册一个navigator,它的作用就是给目标view controller包上一个navigation controller再做跳转:
letpasswordValidation=password.map{(password)->(valid:Bool?,message:String?)inletnumberOfCharacters=password.characters.countifnumberOfCharacters==0{return(false,nil)}ifnumberOfCharacters<4{return(false,"Password must be at least 4 characters")}return(true,"Password acceptable")}.shareReplay(1)
letusernameValidation=username.map{[unownedself]username->Observable<(valid:Bool?,message:String?)>inifusername.characters.count==0{returnjust((false,nil))}ifusername.rangeOfCharacterFromSet(NSCharacterSet.alphanumericCharacterSet().invertedSet)!=nil{returnjust((false,"Username can only contain numbers or digits"))}letloadingValue=(valid:nilasBool?,message:"Checking availabilty ..."asString?)returnself.API.usernameAvailable(username).map{availableinifavailable{return(true,"Username available")}else{return(false,"Username already taken")}}.startWith(loadingValue)}.switchLatest().shareReplay(1)