如何在Swift中包含数组中的可选项

Enc*_*PTL 11 swift

我想在数组中插入一个可选项,如下所示

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一个特定类型,但允许它在某些索引中为空,比如说是一盒鸡蛋).


Con*_*nor 6

像这样:

let arr: AnyObject?[] = [1, 2, nil, 4, 5]
Run Code Online (Sandbox Code Playgroud)

它使得数组类型 AnyObject?


GoZ*_*ner 5

您不能使用AnyObject

\n\n
 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                        ^~~~~~~~~~~~~~~~~\n
Run Code Online (Sandbox Code Playgroud)\n\n

但你可以使用Any

\n\n
 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}\n
Run Code Online (Sandbox Code Playgroud)\n\n

Apple 文档明确说明了这一点:

\n\n
\n

\xe2\x80\x9cSwift 提供了两个特殊类型别名来处理非特定\n 类型:
\no AnyObject 可以表示任何类类型的实例。
\no Any 可以表示除函数类型之外的任何类型的实例。\xe2\x80\x9d

\n\n

摘自:Apple Inc. \xe2\x80\x9cThe Swift 编程语言。\xe2\x80\x9d iBooks。\n https://itun.es/us/jEUH0.l

\n
\n\n

看来Int其他原始类型可能不是类类型的子类型,因此AnyObject不起作用。

\n