我想实现一个可以包含nil元素的自定义可迭代类,类似于[Any?].符合SequenceType大部分都有效,除了合同之外GeneratorType.next()说它应该在所有元素都用完后返回nil.有解决方法吗?
看起来下面的Swift for-in循环试图通过比数组中更多的元素.
例如,这段代码:
var list:[Int?] = [1,2,3,4,5,6,7]
print("C-Style for loop")
for var i=0; i<list.count; i++
{
var x:Int = list[i]!
print(x)
}
print("\nFor-in loop")
for var x:Int! in list
{
print(x)
}
Run Code Online (Sandbox Code Playgroud)
获取此输出:
C-Style for loop
1
2
3
4
5
6
7
For each loop
1
2
3
4
5
6
7
fatal error: unexpectedly found nil while unwrapping an Optional value
...
Illegal instruction: 4
Run Code Online (Sandbox Code Playgroud)
我必须在这里遗漏一些东西.不应该list.count是for-in循环尝试解包的元素数量?
如上图所示,如果使用[Int]列表而不是不解包,则for-in循环按预期工作[Int?].
我在Swift版本2.1.1上.
在Swift,为什么呢
var x: Int? = nil
if let y: Int? = x { ... }
Run Code Online (Sandbox Code Playgroud)
表现不同于
if let y: Int? = nil { ... }
Run Code Online (Sandbox Code Playgroud)
我对第一个案例成功的原因的理解表明第二个案例也应该如此,所以我不能真正理解.
后者不会因为无效的分配而失败,也不会因为可选的链接而失败; 否则它看起来和前者一样.为什么后者失败了,它与前者有何不同.究竟是什么时候,以及出于什么原因,第二个可选绑定被放弃了?
syntax variable-assignment optional conditional-statements swift