2017-07-29 80 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]