在回调函数swift

时间:2017-05-16 22:39:43

标签: swift callback optional

我提出了这个问题,因为即使有多个具有相似标题的问题,我也无法找到一个问题相同的问题。我有一个函数调用一个回调函数。第二个函数再次调用另一个具有回调函数。我的问题是,被调用的第三个函数是在.m文件中,通过网桥我可以访问它。如果没有错误,此函数返回nil。问题是我无法在回调函数中允许nil并返回错误:

致命错误:在解包可选值时意外发现nil

我是swift的新手,从我用可选项阅读的内容来看,这是一个很好的方法,但它仍然存在问题。有什么想法吗?

代码:

mainViewController.swift

func makeACall(){
   var service:Service!
   service = Service()

   // error happens on this next line I believe is the error variable
   service.lookup(item: itemTextField.text, callback: { (details:String?, error: serviceError?) -> Void in

   if (error != nil){
    //do something
   }

   })
}

Service.swift

func lookup(item:String!, callback: (_ details:String?, _ error: serviceError?) -> Void){

super.fetchItem(item, callback: { (details:String?, error: serviceError?) -> Void in 
     callback(details, error!)

 }) // in objective C .m file fetchItem returns the call back as callback(details, nil) if no error

}

1 个答案:

答案 0 :(得分:1)

如果您的回调有可选项,为什么要强制解包呢?

你没有提供详细信息。

这两个都是选项,但你强制解开错误一。像这样使用回调:

callback(details, error)

至于进入的文本。只需在获取之前执行此操作:

guard let itemText = itemTextField.text else { return }

或者,如果您想要使用空字符串调用该函数,您可以执行此操作

let itemText = itemTextField.text ?? ""

然后像这样使用itemText:

service.lookup(item: itemText, callback: { (details:String?, error: serviceError?) -> Void in
     if (error != nil){
     //do something
     }
})