gpt4 book ai didi

swift - 如何转换 anObject respondsToSelector :@selector(stringValue)] to swift3

转载 作者:行者123 更新时间:2023-11-30 11:58:55 32 4
gpt4 key购买 nike

如何将responsetoselector转换为swift3。如果我转换为响应(to:)获取静态方法调用错误

- (NSString *)stringForObjectValue:(id)anObject { 
if ([anObject respondsToSelector:@selector(stringValue)])
{
return [anObject stringValue];
}
}

最佳答案

在 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 方法和属性”的部分。

关于swift - 如何转换 anObject respondsToSelector :@selector(stringValue)] to swift3,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47479781/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com