在Swift中的Array中存储不同类型的值
发布时间:2020-12-14 05:45:30 所属栏目:百科 来源:网络整理
导读:在Swift编程语言中,它说“一个数组在一个有序列表中存储多个相同类型的值.”但我发现你可以在数组中存储多种类型的值.描述不正确吗? 例如 var test = ["a","b",true,"hi",1] 来自REPL xcrun swift 1 import Foundation 2 var test = ["a",1]test: __NSArray
在Swift编程语言中,它说“一个数组在一个有序列表中存储多个相同类型的值.”但我发现你可以在数组中存储多种类型的值.描述不正确吗?
例如 var test = ["a","b",true,"hi",1]
来自REPL
xcrun swift 1> import Foundation 2> var test = ["a",1] test: __NSArrayI = @"5 objects" { [0] = "a" [1] = "b" [2] = [3] = "hi" [4] = (long)1 } 3> 你可以看到测试是NSArray,它是一种AnyObject []或NSObject [] 发生的事情是Foundation提供了将数字和布尔值转换为NSNumber的能力.只要需要编译器编译,编译器就会执行转换. 所以他们现在有了共同类型的NSObject,因此推断为NSArray 没有import Foundation,您的代码不会在REPL中编译. var test = ["a",1] <REPL>:1:12: error: cannot convert the expression's type 'Array' to type 'ArrayLiteralConvertible' var test:Array = ["a",1] <REPL>:4:18: error: cannot convert the expression's type 'Array' to type 'ExtendedGraphemeClusterLiteralConvertible' 但你可以做到这一点 var test : Any[] = ["a",1] 因为它们有一个共同的类型,即Any. 注意:如果没有import Foundation,AnyObject []将无效. var test:AnyObject[] = ["a",1] <REPL>:2:24: error: type 'Bool' does not conform to protocol 'AnyObject' (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |