Swift类型推断如何为空数组工作?

时间:2019-05-07 21:07:43

标签: swift swift5

以下示例说明了该问题:

func f(_ a: [Int]){ print("foo") }
func f(_ a: [[Int]]){ print("bar") }
f([])

这不会出现以下错误:

error: ambiguous use of 'f'
f([])
^
note: found this candidate
func f(_ a: [Int]){ }
     ^
note: found this candidate
func f(_ a: [[Int]]){ }

尽管这不是很好,但可以通过帮助编译器进行诸如f([Int]())f([[Int]]())之类的调用来轻松地规避它。

但是,如果对上面的示例稍加修改,就会变得更加棘手:

func f(_ a: [Int], b: Int = 0){ print("foo") }
func f(_ a: [[Int]]){ print("bar") }
f([])
f([[]])
f([Int]())

此示例可以毫无问题地进行编译,但是可以打印(令人惊讶地)

bar
bar
foo

从我幼稚的角度来看,我可能会遇到编译错误或

foo
bar
foo

版本说明:Apple Swift版本5.0.1(swiftlang-1001.0.82.4 clang-1001.0.46.5)

0 个答案:

没有答案