在我的Objective C代码中,我有这个:
if ([view conformsToProtocol:@protocol(UITextInputTraits)]) {
id<UITextInputTraits> field = view;
field.enablesReturnKeyAutomatically = YES;
}
现在我试图将其转换为swift,所以我这样做了:
if var field = view as? UITextInputTraits {
field.enabledReturnKeyAutomatically = true
}
我收到编译错误,说“&#39; field&#39;是不可改变的。什么是实现这个目标的正确方法?
答案 0 :(得分:0)
问题是由Swift处理可选协议要求的特殊方式引起的。可选的协议属性没有setter。 (我认为这是语言中的一个错误。)你必须解决它。
你可以说(可怕):
switch view {
case let field as UITextField:
field.enablesReturnKeyAutomatically = true
case let field as UITextView:
field.enablesReturnKeyAutomatically = true
default: break
}
另一种方式(同样可怕):
let setter = #selector(setter:UITextInputTraits.enablesReturnKeyAutomatically)
if view.responds(to:setter) {
view.perform(setter, with: 1 as NSNumber)
}