Arrays 将字典中的范围追加到Swift中的数组
这项工作:Arrays 将字典中的范围追加到Swift中的数组,arrays,swift,dictionary,range,Arrays,Swift,Dictionary,Range,这项工作: var aArray = [ Int ]() let aRange = ( 0 ... 5 ) aArray.appendContentsOf( aRange ) 并为aArray生成[0,1,2,3,4,5] 然而,这是: enum Dog { case Snoopy case Lassie case Scooby } let dogRange = [ Dog.Snoopy : ( 0 ... 5 ), Dog.Lassie : ( 6 ... 11 )
var aArray = [ Int ]()
let aRange = ( 0 ... 5 )
aArray.appendContentsOf( aRange )
并为aArray生成[0,1,2,3,4,5]
然而,这是:
enum Dog {
case Snoopy
case Lassie
case Scooby
}
let dogRange = [ Dog.Snoopy : ( 0 ... 5 ), Dog.Lassie : ( 6 ... 11 ), Dog.Scooby : ( 12 ... 17 ) ]
var dArray = [ Int ]()
dArray.appendContentsOf( dogRange[ Dog.Snoopy ] )
在游乐场中抛出错误应为类型为“(C)”的参数列表,并且无法在Xcode中的项目中调用非函数类型“[Dog:ClosedInterval]”的值
dogRange[ Dog.Snoopy ]
产生0..问题是
dogRange[Dog.Snoopy]
产生一个可选的Range?
类型。要使用它,您需要将其展开:
enum Dog {
case Snoopy
case Lassie
case Scooby
}
let dogRange = [ Dog.Snoopy : ( 0 ... 5 ), Dog.Lassie : ( 6 ... 11 ), Dog.Scooby : ( 12 ... 17 ) ]
var dArray = [ Int ]()
if let aDog = dogRange[ Dog.Snoopy ] { // unwrap the optional
dArray.appendContentsOf( aDog )
}
问题是,
dogRange[Dog.Snoopy]
产生了一个可选的Range?
类型。要使用它,您需要将其展开:
enum Dog {
case Snoopy
case Lassie
case Scooby
}
let dogRange = [ Dog.Snoopy : ( 0 ... 5 ), Dog.Lassie : ( 6 ... 11 ), Dog.Scooby : ( 12 ... 17 ) ]
var dArray = [ Int ]()
if let aDog = dogRange[ Dog.Snoopy ] { // unwrap the optional
dArray.appendContentsOf( aDog )
}
Swift字典总是返回可选项。错误消息有点误导,但您只需打开:
if let snoopyRange = dogRange[ Dog.Snoopy ] {
dArray.appendContentsOf( snoopyRange )
}
而且没有更多的错误。Swift字典总是返回可选项。错误消息有点误导,但您只需打开:
if let snoopyRange = dogRange[ Dog.Snoopy ] {
dArray.appendContentsOf( snoopyRange )
}
没有更多的错误。一种“替代”(更实用)的方法
枚举狗{
案例史努比
凯斯莱西
凯斯史酷比
}
让dogRangeDict=[Dog.Snoopy:(0…5),Dog.Lassie:(6…11),Dog.Scooby:(12…17)]
让dogRange=dogRangeDict.sort{(dr1,dr2)->Bool-in
dr1.0.hashValue最后,dogRange不是Dog.xy可索引的字典,而是Dog.xy.hashValue可索引的不可变(线程安全)数组。每次都需要打开字典值,在下一个代码中需要它。此值仅在其展开的范围内可访问。Dog.xy.hashValue可索引的不可变数组的优点将随着每次使用某个dogRange值而增加这是一种非常迂回的向数组添加值范围的方法。这是如何更实用的?在其他答案之外,它是否提供了任何附加值?@KennethBruno(a)没有可以修改的变量(b)如果创建了arr,您可以根据枚举通过下标访问请求的[Int]值。(c) 无需展开该值。顺便说一下,关联值为Range或更高[Int]的enum Dog将是最佳解决方案。我投票支持Eric的答案,因为它解释了问题所在,但更好的方法是避免问题……这是一种向数组添加一系列值的非常迂回的方法。这是如何更实用的?在其他答案之外,它是否提供了任何附加值?@KennethBruno(a)没有可以修改的变量(b)如果创建了arr,您可以根据枚举通过下标访问请求的[Int]值。(c) 无需展开该值。顺便说一下,关联值为Range或更高[Int]的enum Dog将是最佳解决方案。我投票赞成埃里克的答案,因为它解释了问题在哪里,但最好是避免麻烦。。。