2015-09-20 122 views
1

我是一個快速的新手。我在爲我的代碼設置數據結構中創建了一個新方法。只有當該值不等於特定的數字時,該方法纔會插入到集合中。在swift中擴展Set數據類型

extension Set { 
    mutating func addExcludingCurrent(value: Int, currIndex: Int) { 
     if value == currIndex { 
      return 
     } else { 
      self.insert(value) // Error 
     } 
    } 
} 

Cannot invoke 'insert' with an argument list of type '(Int)'。我如何解決它。或者有沒有更好的方法來完成這項任務?

+0

Don' t使用擴展,這不是一個需要添加到'Set'的常用功能。只需使用一種方法。 – zaph

回答

4

A Setstruct,其AssociatedType定義爲Element。所以,你可以通過插入元素擴展它,而不是整數:

extension Set { 
    mutating func addExcludingCurrent(value: Element, currIndex: Element) { 
    if value == currIndex { 
     return 
    } else { 
     self.insert(value) 
    } 
    } 
} 

var a = Set<Int>(); 
a.insert(3) 
a.addExcludingCurrent(5,currIndex: 5) 
0

試試這個:

extension Set { 
    mutating func addExcludingCurrent(value: Element, currIndex: SetIndex<Element>) { 
     if value == currIndex { 
      return 
     } else { 
      self.insert(value) // No more mistakes 
     } 
    } 
} 

在斯威夫特Index定義如下:

public typealias Index = SetIndex<Element> 

所以,你可以寫擴展像這樣:

extension Set { 
    mutating func addExcludingCurrent(value: Element, currIndex: Index) { 
     if value == currIndex { 
      return 
     } else { 
      self.insert(value) // No more mistakes 
     } 
    } 
}