Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.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
Arrays 将字典中的范围追加到Swift中的数组_Arrays_Swift_Dictionary_Range - Fatal编程技术网

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[Int]in 阵列(dr.1) } 打印(dogRange[Dog.Lassie.hashValue])//[6,7,8,9,10,11] 打印(dogRange[Dog.Scooby.hashValue])//[12,13,14,15,16,17] 最后,dogRange不是Dog.xy可索引的字典,而是Dog.xy.hashValue可索引的不可变(线程安全)数组。每次都需要打开字典值,在下一个代码中需要它。此值仅在其展开的范围内可访问。Dog.xy.hashValue可索引的不可变数组的优势将随着每次使用某个dogRange值而增加,这是一种“替代”(更实用)的方式

枚举狗{ 案例史努比 凯斯莱西 凯斯史酷比 } 让dogRangeDict=[Dog.Snoopy:(0…5),Dog.Lassie:(6…11),Dog.Scooby:(12…17)] 让dogRange=dogRangeDict.sort{(dr1,dr2)->Bool-in dr1.0.hashValue[Int]in 阵列(dr.1) } 打印(dogRange[Dog.Lassie.hashValue])//[6,7,8,9,10,11] 打印(dogRange[Dog.Scooby.hashValue])//[12,13,14,15,16,17]
最后,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将是最佳解决方案。我投票赞成埃里克的答案,因为它解释了问题在哪里,但最好是避免麻烦。。。