我正在将iOS应用程序从objective-c转换为swift。在app的objective-c版本中,有一个方法,AlertViewShow被调用,并且其中一个参数nil被传递如下。
AlertViewShow(APPNAME, INTERNET_NOT, nil);
为UIAlertViewDelegate类型传入nil。现在将它转换为Swift时我无法做到
AlertViewShow(APPNAME, INTERNET_NOT, nil) //error: cannot pass in nil into paramter
所以,通过查看堆栈论坛我试过这个......
let alertViewNilObject: UIAlertViewDelegate? = nil
AlertViewShow(APPNAME, INTERNET_NOT, alertViewNilObject!) //compiler doesnt complain
因此不会弹出错误。但是,当我运行应用程序时,它说:“致命错误:打开零值”。
如何将nil传入Swift 2.0中的参数?或者除了传递nil之外还有另一种选择吗?
答案 0 :(得分:2)
你需要让参数本身取一个可选值,而不是试图强制打开nil
可选(这将永远崩溃)。< / p>
func AlertViewShow(title:String, desc:String, delegate:AlertViewDelegate?) {
if delegate != nil {
// do some delegate-y things
}
...
}
...
AlertViewShow(title: APPNAME, desc: INTERNET_NOT, delegate: nil)
如果它是一个obj-c方法,你不会在Swift中重写,那么你只需要在参数中添加nullable
前缀。
-(void) AlertViewShow:(NSString*)title desc:(NSString*)description delegate:(nullable UIAlertViewDelegate*)delegate;
(虽然值得注意的是方法名称应以小写开头,而不是大写)
然后应该在桥接时将其转换为可选参数。