Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 有没有办法检查委托是值类型还是引用类型?_Swift_Value Type_Reference Type - Fatal编程技术网

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

Swift 有没有办法检查委托是值类型还是引用类型?,swift,value-type,reference-type,Swift,Value Type,Reference Type,假设我们有这样的事情: protocol Delegate {} struct Value: Delegate {} class Reference: Delegate {} struct Test { let delegate: Delegate } 我们如何知道委托是结构值类型还是类引用类型 首先想到的是在复制委托后检查内存地址是否相等: struct Test { let delegate: Delegate var isReferenceType: Boo

假设我们有这样的事情:

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
    }
}
甚至有可能做到这一点吗? 有没有更优雅/正确的方法? 复制值类型可能是一项昂贵的操作?
每个类都符合AnyClass协议。但是,枚举和结构不会。利用它,您可以检查它是类还是结构,甚至是枚举

struct Test {
    let delegate: Delegate

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

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

struct Test {
    let delegate: Delegate

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

忘记了这么简单的解决方案。。。愚蠢的我。经常发生在我身上,主要是当我忘了喝早上的咖啡,忘记了这么简单的解决办法。。。我真蠢。经常发生在我身上,主要是因为我忘了喝早上的咖啡