[英]Swift3.0: Can not call value of non-functional type'((Selector!)->Bool)!'
我必须将Swift 2.x代码迁移到Swift 3.0。 在这种情况下,我发现了一个问题“无法调用非功能类型的值((Selector!)-> Bool)!”。 我用谷歌搜索,但没有找到解决我问题的任何好的解决方案。
我有一门课,用Objective-C编写:
@interface AEngineBool : AEngineData
@property BOOL value;
@end
另一个视图控制器类,我像这样使用reactToSelector访问
let param: AnyObject = params[0]
if param.responds(#selector(AEngineBool.value)) {
let iType: Bool = param.value
// Something
}
并在我上面提到的param.response()点上出现错误。
如果我更改了if(param.responds(to:#selector(getter:AEngineBool.value))),那么我会得到错误的“ value(forKey :)”用法。
好的,看来您有3个问题:
responds()
使用了错误的签名 value
是一个吸气剂,应该这样标记,并且 看到这个:
if param.responds(to: #selector(getter: AEngineBool.value)){
let iType = param.value // gives error 'value' is ambiguous
// something?
}
但是,如果我在您的原始类上创建另一个BOOL属性,则该属性将具有更唯一的名称:
@interface AEngineBool : NSObject
@property BOOL value;
@property BOOL uniquePropertyName;
@end
那么这一切都很好:
if param.responds(to: #selector(getter: AEngineBool.uniquePropertyName)){
let iType = param.uniquePropertyName
// something?
}
所以我认为value
只是一般性的一句话,并与value(forKey :)和其他冲突...
也无法弄清楚XCode给出的错误,但是我会围绕它进行编码。 这对您的实施有用吗?
let param: AnyObject = params[0]
if param is AEngineBool {
let iType: Bool = param.value
// something?
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.