Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/100.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 初始化类后加载具有不同类型值的字典数组_Ios_Swift - Fatal编程技术网

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