模糊地使用'价值'

时间:2017-01-24 15:01:30

标签: swift swift3

将我的项目转换为Swift 3之后,我收到了这条消息:

  

模糊地使用'价值'

在线

let fetcher = wrapper?.value as? Fetcher<UIImage>

我正在尝试使用扩展名

与NSObject实例关联
public extension UIImageView {
   var hnk_fetcher : Fetcher<UIImage>! {
      get {
          let wrapper = objc_getAssociatedObject(self, &HanekeGlobals.UIKit.SetImageFetcherKey) as? ObjectWrapper
          let fetcher = wrapper?.value as? Fetcher<UIImage>  //Ambiguous use of 'value'
          return fetcher
      }
      set (fetcher) {
          var wrapper : ObjectWrapper?
          if let fetcher = fetcher {
              wrapper = ObjectWrapper(value: fetcher)
          }
          objc_setAssociatedObject(self, &HanekeGlobals.UIKit.SetImageFetcherKey, wrapper, objc_AssociationPolicy.OBJC_ASSOCIATION_RETAIN_NONATOMIC)
      }
  }

这是我的ObjectWrapper类。

class ObjectWrapper : NSObject {
    let value: Any

    init(value: Any) {
        self.value = value
    }
}

迁移代码之前一切都很好。出了什么问题?

1 个答案:

答案 0 :(得分:1)

问题是.value的使用对Swift来说不明确,因为它可以引用您的value属性,也可以引用任何NSObject value Any 3}}键值编码方法系列。

我不会相信只需使用Swift语法就可以轻松消除歧义(假设您的let fetcher = wrapper?.value(forKeyPath: #keyPath(ObjectWrapper.value)) as? Fetcher<UIImage> 属性输入为{{1} } - 这些方法也可以输入为。)

虽然有趣,但您实际上可以使用键值编码本身来获取值:

value

但老实说,最简单的解决方案就是将您的base属性重命名为其他内容(class Task def str_priority priority < 5 ? 'Low' : 'High' end end @task.str_priority 可能?)。