這將是我在StackOverflow上的第一個問題,也是我在Swift 3上提出的第一個問題;我是一個初學者,也許咬比我可以咀嚼,但是...如何將未知的結構傳遞給函數 - swift 3,IOS10
我想創建一個類,這將有助於創建菜單項(類稱爲'MenuItems')填充到一個我的IOS應用程序中的動態表。我已經創建了這個類的大部分,它根據傳遞給它的數據來標識頭是什麼以及每種類型的多少將在表中分成幾個部分。我現在正在試圖讓這個類變得更通用,所以它可以用於不同的數據結構,我可能會在將來將它們填充到類似的表中。
我希望表中的數據來自於它自己的swift文件中的結構。它看起來像這樣:
struct EquipmentStruct {
var name : String!
var serialNumber : String?
var alias : String?
var image : UIImage?
}
我有,在短期內,在我tableViewController文件(它不會呆在這裏將來)初始化類型EquipmentStruct的數組,我希望創造一個公共職能在我的MenuItems類,這將讓我的項目添加到必要
func addItem(item, dataType) // types for item and dataType are part of my question
在設計這個功能的表我發現我的問題:
我如何通過一個將類型爲EquipmentStruct的變量複製到我的MenuItems類的一個實例中,以便我可以將它添加到我的表中 - 請注意,我所要求的僅僅是指導如何完成addItem方法,而不是其他類。在我心目中,我想要做的事,如:
var dataArray : [EquipmentStruct] = [EquipmentStruct(name: "SA80", serialNumber:"-56-789", alias: "29", image: #imageLiteral(resourceName: "SA80")), EquipmentStruct(name: "LSW", serialNumber:"11111-22-333-4444", alias: "98", image: #imageLiteral(resourceName: "LSW"))] var tableMenuItems = MenuItems() // create instance of class MenuItems override func viewDidLoad() { super.viewDidLoad() for var itemNumber in 0..<dataArray.count{ tableMenuItems.addItem(item: generalHoldingsDataArray[itemNumber], dataType: EquipmentStruct) }
的爲addItems方法原型將因此會是這樣的:
// Add new item of type 'dataType' to MenuItems.tableDataArray
// Store tableDataArrayType for use throughout the class
//
func addItem(item: [Something], dataType: SomeVariableType){
if let newItem = item as! dataType{ // cast the variable received to its type
tableDataArrayType = dataType
tableDataArray.append(newItem)
}
}
這是做事的好方法嗎?
有沒有更簡單的方法來做我想做的事情?
如果我繼續沿着這條道路走下去,可能會遇到什麼問題?
您的幫助將不勝感激。
親切的問候
表格視圖應該只包含一種類型的東西。你是否試圖創建一個表格視圖來保存許多不同類型的對象作爲模型?或者你是否試圖創建多個表視圖,每個表視圖都將一種類型的對象保存爲模型,但具有相同的'MenuItems'類? – Sweeper