如何将responsetoselector转换为swift3。如果我转换为响应的静态方法调用错误(至:)
- (NSString *)stringForObjectValue:(id)anObject {
if ([anObject respondsToSelector:@selector(stringValue)])
{
return [anObject stringValue];
}
}
答案 0 :(得分:0)
在Swift中,不是检查类是否响应选择器,而是使用可选链接来调用方法:
func stringForObjectValue(anObject: AnyObject) -> String? {
return anObject.stringValue?()
}
请注意,该方法必须是Objective-C运行时可用的方法。因此,如果您为自己的班级实施stringValue
,则需要先加@objc
。
class Foo {
@objc func stringValue() -> String {
return "Foo baby"
}
}
class Bar {
// It works with properties too
@objc var stringValue = "Bar bar Jinx"
}
class Baz {
// This method not available to Objective-C
func stringValue() -> String {
return "Baz Baz bo Baz"
}
}
stringForObjectValue(anObject: Foo()) // "Foo baby"
stringForObjectValue(anObject: Bar()) // "Bar bar Jinx"
stringForObjectValue(anObject: Baz()) // nil
有关详细信息,请参阅AnyObject,尤其是标题为"访问Objective-C方法和属性" 的部分。