【问题标题】:Invoke Swift closure in Objective-C在 Objective-C 中调用 Swift 闭包
【发布时间】:2019-07-09 11:22:36
【问题描述】:

我想在 Objective-C 中调用一个 Swift 闭包。

即使我声明了函数,也会出现这样的错误:

“用户”没有可见的@interface 声明选择器“isReady”

斯威夫特:

@objcMember
class User:NSObject {
    func isReady(isTrue: Bool) -> Bool {
        return true
    }
}

目标-C:

User *user = [[User alloc] init];
[_user isReady]. <-  error

【问题讨论】:

标签: objective-c swift


【解决方案1】:

给函数添加@objc修饰符:

@objcMember
class User:NSObject {
 @objc public func isReady(isTrue: Bool) -> Bool {
  return true
   }
 }

并在函数中添加 public 修饰符以允许从其他模块访问(swift 代码构建为模块,ObjC 代码应将其导出并通过开放接口访问)。

【讨论】:

  • 我没有将这个快速代码构建为模块,而 objC 代码应该将其导出并通过开放接口访问
  • 只需将 public 添加到函数中,一切都应该有效。这很奇怪,但我的 Xcode 不允许使用“@objcMember”。我更喜欢使用“@objc”修饰符
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多