我试图使用repeatedValues初始化程序初始化包含可选值的数组,我惊讶地发现以下代码没有编译
let a: Int?[] = Int?[](count: 10, repeatedValue:nil)
// error - Value of Int?[]? not unwrapped; did you mean to use '!' or '?'?
有趣的是类型签名Int?[]?
,例如可选Array
的可选Int
。这感觉就像一个错误,但也许我有一些关于语法的东西。我已经查看了一些语言参考但尚未找到答案。
更明确的Array<Int?>
类型初始值设定项按预期工作
let b: Int?[] = Array<Int?>(count: 10, repeatedValue:nil)
// compiles fine
还有其他人遇到过这种情况并且可以解决一些问题吗?
修改
使用非可选类型结合额外的工作示例以突出显示失败
let c: Int[] = Int[](count: 10, repeatedValue:0)
// non-optional shorthand works fine
class D { var foo = 1 }
let d: D[] = D[](count:10, repeatedValue:D())
// custom class works fine using the shorthand too
enum E { case a, b, c, d, e }
let e: E[] = E[](count:10, repeatedValue:.e)
// enums work too
答案 0 :(得分:5)
斯威夫特3:
let pageViews = [UIImageView?](repeating: nil, count: pageCount)
Swift 2:
let pageViews = [UIImageView?](count: pageCount, repeatedValue: nil)
答案 1 :(得分:0)
你可以使用
let a: Int?[] = Array(count: 10, repeatedValue:nil)
代码
let a: Int?[] = Int?[](count: 10, repeatedValue:nil)
我认为编译器在Int?[]
上调用?[]
时读取Int
(如解析a?[1]
),因此编译错误。这看起来像编译器错误。
这也是编译
let a: Int?[] = Optional<Int>[](count: 10, repeatedValue:nil)