2016-03-11 23 views
1

我想實現一個數組結構,它可以標記單個元素能夠被選中。因此,該元素可以很容易地訪問。如何在swift中實現可選擇的數組結構?

我正在創建一個圍繞Array結構的包裝類。有沒有什麼好的方法可以將Array方法委託給我的SelectableArray的內部陣列?

還有其他更好的方法嗎?

class SelectableArray<Element: Comparable> { 
    let array = Array<Element>() 
    private var selectedIndex: Int? = .None 

    var selectedElement: Element? { 
     guard let index = selectedIndex else { 
      return .None 
     } 
     return array[index] 
    } 

    func select(index: Int) { 
     selectedIndex = array.indices.contains(index) ? index : .None 
    } 

    func select(element: Element) { 
     selectedIndex = array.indexOf(element) 
    } 
} 
+0

能否請您提供一下您目前有一些代碼,使其更容易瞭解你正在努力實施什麼。 –

+0

可能不是。你必須編寫你自己的方法。但是,您可以繼承「NSArray」。或者你可以嘗試'擴展'''''結構。 –

+0

已添加代碼,但尚未完全實施。數組更改時需要添加更新索引的邏輯。 –

回答

1

爲您包裝類只需要創建一個append方法,改變arrayvarlet

class SelectableArray<Element: Comparable> { 
    var array = Array<Element>() 
    private var selectedIndex: Int? = .None 

    // other functions... 

    func append(element: Element) { 
     self.array.append(element) 
    } 
} 
+0

如何將所有'Array'方法委託給我的'Wrapper'?我希望這個類的行爲與vanilla'Array'完全一樣,並具有跟蹤所選元素的附加功能。 –

+0

你不能! Swift中的數組是結構,所以你不能繼承它。如果擴展結構體,則不允許添加新的存儲屬性('selectedIndex')。實現你經常使用的那些,比如'append'和'subscript'。其餘的必須通過'array'屬性來訪問 –

+0

我應該通過說,如果你願意回到ObjectiveC,你可以繼承'NSMutableArray'並添加'selectedIndex'作爲關聯對象 –