我想在数组中插入一个可选项,如下所示
let arr: AnyObject[] = [1, 2, nil, 4, 5]
Run Code Online (Sandbox Code Playgroud)
以下表达式抛出一个编译错误说
Cannot convert the expression's type 'AnyObject[]' to type 'AnyObject'
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点?我需要数组中的可选值或零值,即使我知道我不应该.
小智 19
如果您要插入Ints或nils,请使用
斯威夫特<2.0
var arr: Int?[] = [1, 2, nil, 4, 5]
Run Code Online (Sandbox Code Playgroud)
斯威夫特> = 2.0
var arr: [Int?] = [1, 2, nil, 4, 5]
Run Code Online (Sandbox Code Playgroud)
斯威夫特3x
var arr: Array<Int?> = [1, 2, nil, 4, 5]
Run Code Online (Sandbox Code Playgroud)
这可以针对任何类型进行(不仅仅是Int;如果你想要array一个特定类型,但允许它在某些索引中为空,比如说是一盒鸡蛋).
像这样:
let arr: AnyObject?[] = [1, 2, nil, 4, 5]
Run Code Online (Sandbox Code Playgroud)
它使得数组类型 AnyObject?
您不能使用AnyObject:
18> let ar : AnyObject?[] = [1, 2, nil, 4, 5]\n<REPL>:18:25: error: cannot convert the expression\'s type \'AnyObject?[]\' to type \'AnyObject?\'\nlet ar : AnyObject?[] = [1, 2, nil, 4, 5]\n ^~~~~~~~~~~~~~~~~\nRun Code Online (Sandbox Code Playgroud)\n\n但你可以使用Any:
18> let ar : Any?[] = [1, 2, nil, 4, 5]\nar: Any?[] = size=5 {\n [0] = Some {\n Some = <read memory from 0x7f8d4b841dc0 failed (0 of 8 bytes read)>\n }\n [1] = Some {\n Some = <read memory from 0x7f8d50da03c0 failed (0 of 8 bytes read)>\n }\n [2] = Some {\n Some = nil\n }\n [3] = Some {\n Some = <read memory from 0x7f8d4be77160 failed (0 of 8 bytes read)>\n }\n [4] = Some {\n Some = <read memory from 0x7f8d4be88480 failed (0 of 8 bytes read)>\n }\n}\nRun Code Online (Sandbox Code Playgroud)\n\nApple 文档明确说明了这一点:
\n\n\n\n\n\xe2\x80\x9cSwift 提供了两个特殊类型别名来处理非特定\n 类型:
\n\n
\no AnyObject 可以表示任何类类型的实例。
\no Any 可以表示除函数类型之外的任何类型的实例。\xe2\x80\x9d摘自:Apple Inc. \xe2\x80\x9cThe Swift 编程语言。\xe2\x80\x9d iBooks。\n https://itun.es/us/jEUH0.l
\n
看来Int其他原始类型可能不是类类型的子类型,因此AnyObject不起作用。
| 归档时间: |
|
| 查看次数: |
13165 次 |
| 最近记录: |