Ios 初始化类后加载具有不同类型值的字典数组
我有一个带有静态表的设置页面,用户可以在其中选择每个工作日的可用工作时间(每个工作日一个部分) 为了不必为每个工作日编写相同的代码,我创建了一个名为Ios 初始化类后加载具有不同类型值的字典数组,ios,swift,Ios,Swift,我有一个带有静态表的设置页面,用户可以在其中选择每个工作日的可用工作时间(每个工作日一个部分) 为了不必为每个工作日编写相同的代码,我创建了一个名为datepickers的字典数组,允许我将相同的逻辑应用于override func tableView多天 在Ruby的背景下,我们使用动态变量,不明确声明变量的类型,我不确定如何键入这个var日期选择器:[???]。输入这个变量的正确方法是什么?更一般地说,我用字典数组重构这个变量的方法正确吗 import UIKit class Availa
datepickers
的字典数组,允许我将相同的逻辑应用于override func tableView
多天
在Ruby的背景下,我们使用动态变量,不明确声明变量的类型,我不确定如何键入这个var日期选择器:[???]
。输入这个变量的正确方法是什么?更一般地说,我用字典数组重构这个变量的方法正确吗
import UIKit
class AvailabilityController: UITableViewController {
@IBOutlet weak var mondaysFromDatePicker: UIDatePicker!
@IBOutlet weak var mondaysToDatePicker: UIDatePicker!
@IBOutlet weak var tuesdaysFromDatePicker: UIDatePicker!
@IBOutlet weak var tuesdaysToDatePicker: UIDatePicker!
var datePickers : [???] = {
get {
return [
["section": 0, "row": 2, "datePicker": self.mondaysFromDatePicker],
["section": 0, "row": 4, "datePicker": self.mondaysToDatePicker],
["section": 1, "row": 2, "datePicker": self.tuesdaysFromDatePicker],
["section": 1, "row": 4, "datePicker": self.tuesdaysToDatePicker]
]
}
}
override func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
for datePicker in datePickers {
if indexPath.section == datePicker["section"]! && indexPath.row == datePicker["row"]! {
let height:CGFloat = datePicker["datePicker"]!.hidden ? 0.0 : 216.0
return height
}
}
return super.tableView(tableView, heightForRowAtIndexPath: indexPath)
}
}
字典数组的类型为
[[NSObject:AnyObject]]
但是,请注意,不能在同一表达式中使用=和get
。要么这是一个计算属性,要么它是一个带有初始值设定项的存储属性;你正试图同时做到这两件事
例如,如果需要计算属性,可以编写:
var datePickers : [[NSObject:AnyObject]]
{
return [
["section": 0, "row": 2, "datePicker": self.mondaysFromDatePicker],
["section": 0, "row": 4, "datePicker": self.mondaysToDatePicker],
["section": 1, "row": 2, "datePicker": self.tuesdaysFromDatePicker],
["section": 1, "row": 4, "datePicker": self.tuesdaysToDatePicker]
]
}
查看哪个日期选择器对应于哪个索引路径的测试可以如下所示:
for datePicker in self.datePickers {
if let sec = datePicker["section"] as? Int where sec == indexPath.section,
let row = datePicker["row"] as? Int where row == indexPath.row {
// do something and return something
}
}
然而,我必须补充一点,我实际上不会这样做。我会制作索引路径和日期选择器的字典:
var datePickers : [NSIndexPath:UIDatePicker] {
return [
NSIndexPath(forRow: 2, inSection: 0):self.mondaysFromDatePicker,
NSIndexPath(forRow: 4, inSection: 0):self.mondaysToDatePicker,
NSIndexPath(forRow: 2, inSection: 1):self.tuesdaysFromDatePicker,
NSIndexPath(forRow: 4, inSection: 1):self.tuesdaysToDatePicker,
]
}
为什么??因为如果这样做,那么为该索引路径获取正确的日期选择器就非常简单:
if let dp = self.datePickers[indexPath] {
// ...
}
谢谢,你的方法奏效了:
var-datePicker:[[NSObject:AnyObject]]{
似乎我知道调用它时必须将AnyObject
转换回Int
和UIDatePicker
。我该怎么做:Int(datePicker[“section”!
/datePicker[“datePicker”]!作为UIDatePicker
?