如何设置协议的可选属性?例如,UITextInputTraits具有许多可选的读/写属性.当我尝试以下操作时,我收到编译错误(无法在'textInputTraits'中分配给'keyboardType'):
func initializeTextInputTraits(textInputTraits: UITextInputTraits) {
textInputTraits.keyboardType = .Default
}
Run Code Online (Sandbox Code Playgroud)
通常在访问协议的可选属性时添加问号,但在分配值时这不起作用(错误:无法分配给此表达式的结果):
textInputTraits.keyboardType? = .Default
Run Code Online (Sandbox Code Playgroud)
协议看起来像:
protocol UITextInputTraits : NSObjectProtocol {
optional var keyboardType: UIKeyboardType { get set }
}
Run Code Online (Sandbox Code Playgroud)
我会考虑将扩展名恢复为默认值keyboardType,并让setter不执行任何操作.
extension UITextInputTraits {
var keyboardType: UIKeyboardType {
get { return .default }
set { /* do nothing */ }
}
}
Run Code Online (Sandbox Code Playgroud)
这样您就可以optional从属性声明中删除它.
protocol UITextInputTraits : NSObjectProtocol {
var keyboardType: UIKeyboardType { get set }
}
Run Code Online (Sandbox Code Playgroud)
或者,如果您愿意,可以使用可选的返回类型var keyboardType: UIKeyboardType?,并返回nil而不是.Default在您的扩展中.
这样,您可以测试myObject.keyboardType == nil以查看您的属性是否已实现.
| 归档时间: |
|
| 查看次数: |
6586 次 |
| 最近记录: |