Arrays Swift 3多维数组,在Swift 2.2及以前版本中使用
我已经绞尽脑汁几个小时了,感觉我已经尝试了大多数事情,所以我转向可靠的堆栈溢出 我有一个来自与unix时间戳相关的服务器的数组和一个如下所示的值:Arrays Swift 3多维数组,在Swift 2.2及以前版本中使用,arrays,swift,multidimensional-array,swift3,xcode8,Arrays,Swift,Multidimensional Array,Swift3,Xcode8,我已经绞尽脑汁几个小时了,感觉我已经尝试了大多数事情,所以我转向可靠的堆栈溢出 我有一个来自与unix时间戳相关的服务器的数组和一个如下所示的值: [[1475511843000183649999]、[1475512143000183612691]、[1475512443000183503638] 我过去只是将这个变量设置为 var图点:NSArray=[] 我现在尝试转换为Swift3,并使用[[UInt32:Int]]()指定我有一个包含其他数组的数组,这些数组包含32个无符号整数以及一个整
[[1475511843000183649999]、[1475512143000183612691]、[1475512443000183503638]
我过去只是将这个变量设置为
var图点:NSArray=[]
我现在尝试转换为Swift3,并使用[[UInt32:Int]]()
指定我有一个包含其他数组的数组,这些数组包含32个无符号整数以及一个整数。无论我以何种方式尝试包括标准语法与糖化语法:
[Int:[UInt32:Int]]()
[[UInt32:Int]]()
[[]]()
由于键入问题,允许我访问第二个数组,通常会出现类似于类型“Int?”没有下标成员的错误
在我决定如何格式化数据之前,数据就是这种格式的,所以我无法调整它,任何帮助都将不胜感激
服务器调用如下所示:
`Alamofire.request(urlString).responseJSON{response in
开关响应。结果{
案例.成功(让数据):
让json=json(数据)
尝试Andrey Gordeev的答案时
这个怎么样:
let array = [[UInt64]]()
或
您试图通过[Int:[UInt32:Int]]()
和[[UInt32:Int]]()
定义的不是数组数组。第一个是字典,其中值是另一个字典。第二个是字典数组
PS:正如Alexander Momchilov提到的,最好将您的数据包装到[(UInt64,Int)]
这个怎么样:
let array = [[UInt64]]()
或
您试图通过[Int:[UInt32:Int]]()
和[[UInt32:Int]]()
定义的不是数组数组。第一个是字典,其中值是另一个字典。第二个是字典数组
PS:正如Alexander Momchilov提到的,最好将数据包装到[(UInt64,Int)]
我现在正尝试转换为Swift 3,并使用[[UInt32:Int]]()
指定我有一个数组,其中包含其他数组,这些数组包含32个无符号整数以及一个整数
这根本不是它的意思。[[UInt32:Int]]()
是:Array.init()
拥有两种类型的数组(如UInt32
和Int
)的唯一方法是让数组存储这两种类型的超级类型。在这种情况下,UInt32
和Int
都与Integer
协议一致,因此您可以将UInt32
和Int
存储在协议中rray
。但这相当糟糕,因为它需要您不断地从整数
显式向下转换为UInt32
或Int
。这引入的间接转换也会带来性能成本
实现类似功能的更好方法是存储UInt32和Int的元组:
let graphPoints: [(UInt32, Int)] = [
(1475511843000, 183649999),
(1475512143000, 183612691),
(1475512443000, 183503638)
]
但是,这甚至不起作用,因为1475511843000
太大,无法在UInt32
中停止,其最大值为4294967295
(UInt32.max
)
我现在正尝试转换为Swift 3,并使用[[UInt32:Int]]()
指定我有一个数组,其中包含其他数组,这些数组包含32个无符号整数以及一个整数
这根本不是它的意思。[[UInt32:Int]]()
是:Array.init()
拥有两种类型的数组(如UInt32
和Int
)的唯一方法是让数组存储这两种类型的超级类型。在这种情况下,UInt32
和Int
都与Integer
协议一致,因此您可以将UInt32
和Int
存储在协议中rray
。但这相当糟糕,因为它需要您不断地从整数
显式向下转换为UInt32
或Int
。这引入的间接转换也会带来性能成本
实现类似功能的更好方法是存储UInt32和Int的元组:
let graphPoints: [(UInt32, Int)] = [
(1475511843000, 183649999),
(1475512143000, 183612691),
(1475512443000, 183503638)
]
但是,这甚至不起作用,因为1475511843000
太大,无法在UInt32
中停留,其最大值为4294967295
(UInt32.max
)。正如您所说,这是其他数组的数组
将创建字典的数组
,因为[UInt32:Int]
是一个字典
,其中UInt32
作为键,Int
作为值
[Int:[UInt32:Int]]()
Swift数组只包含一种类型的元素,因此您可以执行[[Integer]]
,Integer
是UInt32
和Int
都符合的协议。然后,在访问时,如果您希望将它们转换为UInt32
或Int
,则必须显式转换为UInt32
然后,您还可以将该[[Integer]]
转换为[(UInt32,Int)]
,一个包含UInt32
和Int的元组的数组
,正如您所说,这是其他数组的数组([[UInt32:Int]])()
将创建字典的数组
,因为[UInt32:Int]
是一个字典
,其中UInt32
作为键,Int
作为值
[Int:[UInt32:Int]]()
Swift数组只包含单一类型的元素,因此您可以执行[[Integer]]
,Integer
是UInt32
和Int
都符合的协议。然后在访问时,您必须
[(UInt32, Int)]
theArray[3].0 // get the timestamp of the fourth item
theArray[7].1 // get the Int value of the eighth item
[UInt32: Int]