2017-07-29 55 views
1

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

不能调用与类型的参数列表 '插入' '(智力,在:智力)'

这里是我的代码

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

回答

7

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

您只需要对可以包含整数文字0的数组进行扩展。

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

举例:您可以通过在Element类型,指定该类型是ExpressibleByIntegerLiteral数组的添加约束为此

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] 
0

我会用这个简单的代码,没有扩展 - 斯威夫特3:

var myArray = [1,2,3] 
myArray.insert(0, at: 0) 

print(myArray) // [0,1,2,3]