如何解决代码中出现的以下错误:“对成员'subscript'的歧义引用”?

时间:2019-06-17 08:49:48

标签: ios swift

我正在尝试使用在groupedEventArray中初始化的字典功能init(grouping:by:)通过 event_category 事件数组进行分组。 但是,当我尝试访问TableView数据源 cellForRowAt 中的let (category, events) = groupedEventArray[indexPath.row]时,会导致错误:对成员'下标'的引用不明确

这是我正在尝试的示例代码:

    var events = [Events]()

    var groupedEventArray = [Any]()

    var testEvent1 = Events(id: 1, event_name: "PrototypeEvent", event_category: "Party", event_date: "10/06/19", event_img_url: "null")

    var testEvent2 = Events(id: 2, event_name: "PrototypeEvent2", event_category: "Music", event_date: "11/06/19", event_img_url: "null")

    override func viewDidLoad() {
        super.viewDidLoad()

        events.append(testEvent1)

        events.append(testEvent2)

        groupedEventArray = Dictionary(grouping: events) { $0.event_category }.compactMap({( $0.key, $0.value )})
        print(groupedEventArray)

    }

    func numberOfSections(in tableView: UITableView) -> Int {
        return 1
    }

    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return groupedEventArray.count
    }

    func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
        return 245
    }

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "PopularCell", for: indexPath) as! PopularCell
        let (category, events) = groupedEventArray[indexPath.row] // Error : Ambiguous reference to member 'subscript'

        return cell
    }

2 个答案:

答案 0 :(得分:1)

将您的groupedEventArray声明为类型Dictionary<String, [Events]>

var groupedEventArray = Dictionary<String, [Events]>()

也放下compactMap

groupedEventArray = Dictionary(grouping: events) { $0.event_category }

并使用事件类别类型进行访问

let partyEvents = groupedEventArray["Party"]

答案 1 :(得分:0)

在这里,由于您将groupedEventArray作为Any的数组,因此无法将其下标分配给元组。要解决该错误,请将数组的类型更改为元组本身。

即, 只需像这样更改一行

var groupedEventArray = [(String, [Events])]()

一切保持不变。