纯 Swift 运行时如何利用反射获取实例的方法,并执行

如题.
示例代码如下:


import Foundation

protocol Sender {}

extension Sender {
    func send() { print("default send") }
}

class MqttSender: Sender {
    var name = "123"
    func send() {
        print("MqttSender send")
    }
}

let sender: Sender = MqttSender()

// sender 为 Sender 类型, 则调用默认实现
sender.send() // 输出: default send

// sender 转化为 MqttSender 类型, 则调用 MqttSender 重载实现的方法
(sender as? MqttSender)?.send() // 输出: MqttSender send

// 但是: 在不知道 `sender` 实例具体是什么类型的时候(不用 as 进行类型转换)
// 怎么如何调用它的 send 方法. (反射??)
// ...
阅读 2.9k
1 个回答
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进