如何区分Swift 3.0中的类(确保它不是结构或枚举)
如何理解实例是值类型还是引用类型? 说明: 首先,我在中读到了关于任何对象的内容 Swift为处理非特定类型提供了两种特殊类型:如何区分Swift 3.0中的类(确保它不是结构或枚举),swift,xcode,swift3,value-type,reference-type,Swift,Xcode,Swift3,Value Type,Reference Type,如何理解实例是值类型还是引用类型? 说明: 首先,我在中读到了关于任何对象的内容 Swift为处理非特定类型提供了两种特殊类型: Any可以表示任何类型的实例,包括函数 类型: 任何对象都可以表示任何类类型的实例 使用任何 只有当您明确需要行为和 他们提供的能力。最好是具体说明一下 您希望在代码中使用的类型 所以我决定在我的操场上写一些简单的代码: struct MyStruct { var x = 5 } let testStruct = MyStruct() testSt
- Any可以表示任何类型的实例,包括函数 类型:
- 任何对象都可以表示任何类类型的实例
struct MyStruct {
var x = 5
}
let testStruct = MyStruct()
testStruct is AnyObject
if let object = testStruct as? AnyObject {
//Do something
}
当我看到两条警告时,我很震惊
- “是”测试总是正确的
- 从“MyStruct”到“AnyObject”的条件强制转换总是成功的steststruct是AnyObject
class TestClass {
weak var object: AnyObject?
}
var instance: TestClass? = TestClass()
instance?.object = testStruct as AnyObject
我没有看到任何警告或错误。它会导致崩溃或未定义的行为吗?这对我来说很奇怪
我还提到了操场上的类型
- 类型(of:testStruct as AnyObject)——\u SwiftValue.type
- 类型(of:testStruct)-MyStruct.type
- Swift版本:苹果Swift版本3.0.2(swiftlang-800.0.63 clang-800.0.42.1)
- XCode版本:8.2.1(8C1002)
type(of: value) is AnyClass
比较(dupe?)-一切都可以桥接到Swift 3中的AnyObject
。无法在Obj-C中直接表示的事物(例如MyStruct
)将其放入不透明的Obj-C兼容框中,\u SwiftValue
。对它的弱
引用应该可以–尽管在您的示例中,您正在作业中装箱,它将立即解除分配。