【发布时间】:2020-06-22 01:08:12
【问题描述】:
类是用 Swift 编写的,
@objc class Test: NSObject {
@objc func testBoolean() -> Bool {
return true
}
@objc func testOptionalBoolean() -> Bool? {
return true
}
@objc func testThrowableBoolean() throws -> Bool {
return true
}
@objc func testThrowableOptionalBoolean() throws -> Bool? {
return true
}
}
在这些函数中,只有第一个函数是可编译的。
其他函数编译错误,
testOptionalBoolean:方法不能被标记为@objc,因为它的结果类型不能在Objective-C中表示
testThrowableBoolean:抛出方法不能被标记为@objc,因为它返回一个'Bool'类型的值;返回 'Void' 或桥接到 Objective-C 类的类型
testThrowableOptionalBoolean:方法不能被标记为@objc,因为它的结果类型不能在Objective-C中表示
让 objc 调用者可以使用所有函数的正确方法是什么?
【问题讨论】:
-
你仍然想在 Swift 中以同样的方式调用它们,对吧?
-
@Sweeper yes offcourse
-
您介意创建这些方法的副本吗(不是它们的主体副本,只是标题)?比如你可以写另外一个方法
@objc func testOptionalBoolean() -> NSNumber? { return testOptionalBoolean().map(NSNumber.init(value:)) }但是我知道有些人不喜欢有两个同名同参数的方法。 -
返回编译器抱怨的
NSNumber
标签: objective-c swift compiler-errors throwable