将我的项目转换为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
}
}
迁移代码之前一切都很好。出了什么问题?
答案 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
可能?)。