在Swift中我有这个对象城市:
class City {
var name:String
init(name: String) {
self.name = name
}
var file:String?
var description:String?
}
现在在我的viewcontroller中我用这些类型的对象填充一个数组,我想填充一个tableview,但是我无法访问该对象的属性。
我向您展示了不带属性“file”的代码:
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
var cell = menu_list.dequeueReusableCellWithIdentifier("list_cell") as ListCell
cell.accessoryType = UITableViewCellAccessoryType.DisclosureIndicator
var obj = list_element.objectAtIndex(indexPath.row)
var name = obj.file
return cell
}
现在停止!您可以建议我添加“作为城市”
var obj = list_element.objectAtIndex(indexPath.row) as City
但是我不知道我的数组填充了什么类型的对象,我还有其他对象作为Country和State,那么对象的一般管理方式是什么?在obj-c中我用“id”做了但是在swift中?
答案 0 :(得分:0)
在Swift中,如果您愿意,可以使用NSArray
,只需要确保所有对象都是NSObject
的子类。 Swift还允许您声明一个类型[Any]
的数组,它可以包含任何类型。然后使用条件转换as?
来处理对象:
class City {
}
class Country {
}
class State {
}
var places = [Any]()
places.append(City())
places.append(State())
places.append(Country())
places.append(Country())
places.append(13)
for place in places {
if let loc = place as? City {
println("processing city")
}
if let loc = place as? State {
println("processing state")
}
if let loc = place as? Country {
println("processing country")
}
}
您还可以使用switch
来确定类型:
for place in places {
switch place {
case let loc as City:
println("I see a city")
case let loc as State:
println("I see a state")
case let loc as Country:
println("I see a country")
default:
println("I don't know what it is")
}
}
如果您要将places
City
State
,Country
和Location
个对象放入其中,那么将这三个类派生自一个基类(我们称之为[Location]
),然后让您的地点数组为{{1}}类型。