Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xcode/7.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 3.0中的类(确保它不是结构或枚举)_Swift_Xcode_Swift3_Value Type_Reference Type - Fatal编程技术网

如何区分Swift 3.0中的类(确保它不是结构或枚举)

如何区分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

如何理解实例是值类型还是引用类型?

说明:

首先,我在中读到了关于任何对象的内容

Swift为处理非特定类型提供了两种特殊类型:

  • 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
testStruct可能已隐式转换为类。但是我不确定,也不能在网上找到任何关于它的信息=(

你读过关于它的一些东西吗?或者你能给我一些文档的链接来了解发生了什么。可能我错过了一些非常重要的东西

  • Swift版本:苹果Swift版本3.0.2(swiftlang-800.0.63 clang-800.0.42.1)
  • XCode版本:8.2.1(8C1002)
附言

我必须强调,它在Swift 2.0中运行良好(正如我所想)

无论如何,谢谢大家的关注

简短的回答是:

type(of: value) is AnyClass
比较(dupe?)-一切都可以桥接到Swift 3中的
AnyObject
。无法在Obj-C中直接表示的事物(例如
MyStruct
)将其放入不透明的Obj-C兼容框中,
\u SwiftValue
。对它的
引用应该可以–尽管在您的示例中,您正在作业中装箱,它将立即解除分配。