无法通过协议设置值

时间:2016-09-19 23:17:53

标签: objective-c swift swift3

在我的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;是不可改变的。什么是实现这个目标的正确方法?

1 个答案:

答案 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)
}