Swift 3 Array扩展错误

1 xcode ios swift swift3

我想在第0个索引处始终向数组插入0,我正在尝试在数组上编写扩展名.但是给出一些错误:

无法使用类型'(Int,at:Int)'的参数列表调用'insert'

这是我的代码

extension Array {
    mutating func printWithZero() -> Array
    {
        self.insert(0, at: 0)
        return self
    }
}
Run Code Online (Sandbox Code Playgroud)

vac*_*ama 7

正如您所定义的那样,您的扩展适用于所有类型的数组.不幸的是,不可能只插入0任何数组.例如,您不能插入0[String].

您需要使此扩展仅适用于可包含整数文字的数组0.您可以通过在指定Element类型为的数组类型上添加约束来执行此操作ExpressibleByIntegerLiteral:

extension Array where Element: ExpressibleByIntegerLiteral {
    mutating func printWithZero() -> Array
    {
        self.insert(0, at: 0)
        return self
    }
}
Run Code Online (Sandbox Code Playgroud)

例:

var a = [1, 2, 3]
let b = a.printWithZero()

print(a)  // [0, 1, 2, 3]
print(b)  // [0, 1, 2, 3]

// Works with an array of Doubles too

var c = [1.5, 2.5, 3.5]
let d = c.printWithZero()

print(c)  // [0, 1.5, 2.5, 3.5]
print(d)  // [0, 1.5, 2.5, 3.5]
Run Code Online (Sandbox Code Playgroud)