我想总是在数组的第0个索引处插入0,我试图在数组上写扩展名。但给一些错误,如:

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

这是我的代码

extension Array {
    mutating func printWithZero() -> Array
    {
        self.insert(0, at: 0)
        return self
    }
}

最佳答案

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

您需要使此扩展仅适用于可以包含整数文字0的数组。您可以通过在数组的Element类型上添加一个约束来做到这一点,该约束指定类型为ExpressibleByIntegerLiteral:

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

例:
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]

08-27 19:23
查看更多