微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

有没有办法检查委托是值还是引用类型?

如何解决有没有办法检查委托是值还是引用类型?

假设我们有这样的事情:

protocol Delegate {}

struct Value: Delegate {}
class Reference: Delegate {}

struct Test {
    let delegate: Delegate
}

我们如何知道委托是结构(值类型)还是类(引用类型)?

首先想到的是在复制委托后检查内存地址是否相等:

struct Test {
    let delegate: Delegate

    var isReferenceType: Bool {
        let copy = delegate

        let copyAddress = // ... get memory address of a copy
        let originalAddress = // ... get memory address of an original

        return copyAddress == originalAddress
    }
}

  1. 是否有可能做到这一点?
  2. 有没有更优雅/正确的方法来做到这一点?
  3. 复制值类型可能是一项代价高昂的操作?

解决方法

每个类都符合 AnyClass 协议。但是枚举和结构不会。利用它你可以检查它是一个类还是一个结构(甚至是一个枚举)

struct Test {
    let delegate: Delegate

    var isReferenceType: Bool {
        return type(of:delegate) is AnyClass
    }
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。