【问题标题】:Type 'User' has no subscript members类型“用户”没有下标成员
【发布时间】:2018-08-18 07:22:47
【问题描述】:

我是 Swift 新手,担心我在这里错误地定义了我的变量。我确定这是我犯的一个愚蠢的错误,因为我没有完全理解 Swift 语法。

当我在函数中引用我的用户类型没有任何下标成员时,我收到错误消息:

    let item = userDataSource[indexPath.row]
    cell.leftLabel.text = item[0]
    cell.rightLabel.text = item[1]

但是,我正在扩展

extension AccountViewController: GetUserDelegate {
    func getUserSuccess(user: User) {
        self.userDataSource = [user]
    }
}

并且userDataSource定义在类的顶部:

fileprivate var userDataSource: [User]

我没有正确地转换我的变量吗? User 模型只是一个映射的 JSON obj:

guard let user = Mapper<User>().map(JSONObject: value)

我在这里缺少什么?我是否正确地转换了我的变量?

这最终是我希望数组的外观:

    ["Name", "Bob Jim"],
    ["MC #", "1234567"],
    ["Company Name", "Bob's Truckin"],
    ["Truck Type", "Flat Bed"],
    ["Cell", "(555) 555-5555"],
    ["Dispatch", "(999) 999-9999"],
    ["Favorite Destinations", "Los Angeles"]

【问题讨论】:

  • 两个问题。 1:如果我正确理解了您的问题,您有一个User 类和一个名为userDataSource 的数组,它在您的类之外,旨在让您的所有用户保持正确? 2:委托到底是干什么用的?
  • 我有一个用户类,我想要一个 userDataSource,它是一个属性数组,用户项的名称作为 0 索引,值作为 1 索引。这部分代码不是我写的,所以我不太清楚为什么要写委托。
  • 澄清一下,你想让userData[0]给你User.name然后userData[1]给你User.value?那么value究竟是什么?
  • 不不,我希望 userData[0] 给我属性名称的值,而 userData[1] 给我该属性的值。很抱歉造成混乱。
  • 我已经意识到,我认为我需要将用户对象转换为数组。

标签: ios swift types


【解决方案1】:

您的 userDataSource 是您提到的一组用户。

fileprivate var userDataSource: [User]

您将通过以下方式取回任何指定索引的用户

let item = userDataSource[indexPath.row] as User

这里,item是没有下标成员的用户对象,如果你使用item[0]。

你应该使用类似下面的东西:

item.name // or any property 
or
cell.leftLabel.text = item.name

【讨论】:

  • Hrm,我的协议只返回一个用户,所以看起来我不必要地将它包装在一个数组中。我想要的只是让一个用户进入 cell.leftLabel 区域,每个数组行的属性分隔为名称|值。
  • 对不起,如果我对这一切如何运作的理解有点低 - 在此之前我只参与过一个小型 Swift 项目。
猜你喜欢
  • 2021-06-05
  • 2016-07-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多