如何在Swift中将nil类型传递给参数?

时间:2016-02-15 19:11:17

标签: ios objective-c swift

我正在将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之外还有另一种选择吗?

1 个答案:

答案 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;

(虽然值得注意的是方法名称​​应以小写开头,而不是大写)

然后应该在桥接时将其转换为可选参数。