【问题标题】:What is the equivalent of an Objective-C id in Swift?Swift 中的 Objective-C id 等价物是什么?
【发布时间】:2023-03-18 15:31:01
【问题描述】:

我正在尝试使用 @IBAction 将按钮单击事件绑定到 Swift 方法。在 Objective-C 中,IBAction 的参数类型是 id。 Swift 中的 id 等价物是什么?

【问题讨论】:

    标签: objective-c swift


    【解决方案1】:

    斯威夫特 3

    Any,如果你知道发件人永远不是nil

    @IBAction func buttonClicked(sender : Any) {
        println("Button was clicked", sender)
    }
    

    Any?,如果发件人可以是nil

    @IBAction func buttonClicked(sender : Any?) {
        println("Button was clicked", sender)
    }
    

    斯威夫特 2

    AnyObject,如果你知道发件人永远不是nil

    @IBAction func buttonClicked(sender : AnyObject) {
        println("Button was clicked", sender)
    }
    

    AnyObject?,如果发件人可以是nil

    @IBAction func buttonClicked(sender : AnyObject?) {
        println("Button was clicked", sender)
    }
    

    【讨论】:

    • 或者有时AnyObject?,这取决于你想如何处理 nil。
    • 来自 docs:Swift 包含一个名为 AnyObject 的协议类型,它代表任何类型的对象,就像 Objective-C 中的 id 一样。 developer.apple.com/library/prerelease/ios/documentation/Swift/…
    • 或者如果你确定它是按钮只是 UIButton 而不是 anyObject
    • 任何对象?如果您认为 nil 可能会被调用(通常人们从代码中调用 IBAction 函数,没有发送者),MyClass 或 MyClass?如果您知道发件人不是 MyClass 以外的其他类别。
    • 从 Swift 3 开始,使用 id 和无类型集合的 Objective-C 接口将被导入 Swift,因为它采用 Any 类型而不是 AnyObjectSE-0116
    【解决方案2】:

    任何对象

    其他映射类型,

    将某些 Objective-C 核心类型重新映射到 Swift 中的替代方案, 像 NSString 到 String 一样

    将某些 Objective-C 概念重新映射到 Swift 中的匹配概念,例如 指向选项的指针

    【讨论】:

      猜你喜欢
      • 2014-07-28
      • 1970-01-01
      • 2017-11-09
      • 1970-01-01
      • 1970-01-01
      • 2013-12-01
      • 2015-07-30
      • 2011-07-21
      • 1970-01-01
      相关资源
      最近更新 更多