我提出了这个问题,因为即使有多个具有相似标题的问题,我也无法找到一个问题相同的问题。我有一个函数调用一个回调函数。第二个函数再次调用另一个具有回调函数。我的问题是,被调用的第三个函数是在.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
}
答案 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
}
})