[英]Swift array of different types
据我所知,数组是 Swift 中的值类型,没有引用。
能否请您解释一下以下情况:
var arr: [Any] = [1, "1", UIView(), "qwerty"]
print(arr[3] as! String)
"arr[3]" O(1) 操作如何。 如何在没有迭代的情况下获得第三个元素?
据我所知,数组是 Swift 中的值类型,没有引用。
下半场不正确。 作为值类型的类型T
仅意味着此代码打印“1, 2”,而不是“2, 2”:
var a = T()
a.someIntProperty = 1
var b = a
b.someIntProperty = 2
print("\(a.someIntProperty), \(b.someIntProperty)")
作为一个值/引用类型意味着一组行为,而不是该类型是如何在幕后实现的。
正如您所说,要使数组访问在 O(1) 时间工作,数组将需要包含指向数组元素的指针,这些元素的大小都相同。 这不会使Array
成为“非值类型”,因为当您重新分配[Any]
类型的变量时,仍会复制整个数组。 另一个可能更有说服力的原因是数组的整个值仍然存储在arr
。 只是它是一堆指向元素的指针。 如果Array
确实是一种引用类型,则arr
将存储一个指针,指向数组的值。
数组按顺序存储在内存中的块中,因此对于索引,它是一个O(2)的计算,它指的是指向实际数据内容的指针,最有可能只使用Any
,其中每个元素的大小不同
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.