类型“字符串”不符合协议“NilLiteralConvertiblle”
Posted
技术标签:
【中文标题】类型“字符串”不符合协议“NilLiteralConvertiblle”【英文标题】:type 'String' does not conform to protocol 'NilLiteralConvertiblle' 【发布时间】:2014-09-19 22:38:14 【问题描述】:这行代码:
var errorView = UIAlertView(title: errorTitle, message: errorString, delegate:self, cancelButtonTitle: "Cancel", otherButtonTitles: "OK", nil)
从 Objective-C 代码重写:
UIAlertView *errorView =
[[UIAlertView alloc] initWithTitle:errorTitle
message:errorString delegate:self cancelButtonTitle:nil
otherButtonTitles:@"OK", nil];
这给了我这个错误:
我可以通过不在最后加上 nil 来解决它,但我只是不知道为什么,有人知道答案吗?
【问题讨论】:
【参考方案1】:这是一个 Variadic Parameter,它在 Objective-C 中需要 nil
终止,但在 Swift 中不需要。
Swift 方法签名:
init(title: String, message: String, delegate: UIAlertViewDelegate?, cancelButtonTitle: String?, otherButtonTitles firstButtonTitle: String, _ moreButtonTitles: String...)
Objective-C 方法签名:
- (instancetype)initWithTitle:(NSString *)title message:(NSString *)message delegate:(id /*<UIAlertViewDelegate>*/)delegate cancelButtonTitle:(NSString *)cancelButtonTitle otherButtonTitles:(NSString *)otherButtonTitles, ... NS_REQUIRES_NIL_TERMINATION
从技术上讲,moreButtonTitles
是 Swift 中的可变参数。
【讨论】:
以上是关于类型“字符串”不符合协议“NilLiteralConvertiblle”的主要内容,如果未能解决你的问题,请参考以下文章