【问题标题】:Type Has No Subscript Members?类型没有下标成员?
【发布时间】:2016-07-08 09:08:37
【问题描述】:

当我尝试这样做时,我收到错误“类型'Ship'没有下标成员:

var coor = ship[index]

我试过了

var coor = ship?[index] as? Coordinate

但我收到此错误:“不能对 'Ship' 类型的非可选值使用可选链接”

这是我的Ship 课程:

import Foundation

class Ship: NSObject, NSCoding {

    var shipCoors: [Coordinate]?

    var count: Int {
        var count = 0
        for _ in shipCoors! {
            count++
        }
        return count
    }

    init(shipCoors: [Coordinate]) {
        self.shipCoors = shipCoors
    }

    required init(coder decoder: NSCoder) {
        self.shipCoors = decoder.decodeObjectForKey("shipCoors") as? [Coordinate]
    }

    func encodeWithCoder(coder: NSCoder) {
        coder.encodeObject(shipCoors, forKey: "shipCoors")
    }
}

Coordinate 类也是NSObject, NSCoding 类型,等等... 当我加载对象时(来自NSUserDefaults),这些对象似乎在数组中?我怎么把它们弄出来?!

【问题讨论】:

  • 你想要ship.shipCoors?[index]
  • 您的 count 属性获取器可以是 return shipCoors?.count ?? 0 顺便说一句。

标签: ios swift optional nscoding subscript


【解决方案1】:

为了使用下标语法,你必须显式地为类添加下标支持,例如ship[index].

以下是涵盖下标以及如何为您的课程添加下标的文档:

https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/Subscripts.html

【讨论】:

    【解决方案2】:

    为您的Ship 对象添加下标以返回可选的Coordinate:

    subscript(index: Int) -> Coordinate? {
        guard let coordinate = shipCoors?[index] else {
            return nil
        }
        return coordinate
    }
    

    shipCoors 被声明为[Coordinate]?(可选数组),因此Ship 存在shipCoors 中没有数组的风险。在这种情况下,我返回 nil,但你可以返回任何你想要的东西。

    【讨论】:

      【解决方案3】:

      在 Swift 3 中有类似的问题

      Type '() -> [myObject]' has no subscript members
      

      在我的例子中,这是一个简单的例子,没有在函数调用“()”中添加括号。男生错误。

      即下面的代码是罪魁祸首

      dataModel.myFunction
      

      用dataModel.myFunction()解决

      【讨论】:

      • 感谢您发布此答案。一个人可以离开学校很长时间,仍然会犯这个错误(似乎)。
      • 我很高兴,我每天都面临这样的问题:-)
      【解决方案4】:

      对于我的代码:

      func takeN(_ numbers: Int...) -> [Int]{
          var intArray : [Int] = []
          for n in numbers{
              intArray.append[n]
      
          }
          return intArray
      }
      

      我收到以下错误:

      错误:类型 '(Int) -> ()' 没有下标成员 intArray.append[n]

      这意味着append 函数不使用下标或[]!

      换行

      intArray.append[n]
      

      到:

      intArray.append(n)
      

      会解决整个问题!

      【讨论】:

        猜你喜欢
        • 2021-06-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-08-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多