类型没有下标成员?

Type Has No Subscript Members?

我尝试执行以下操作时收到错误消息“类型 'Ship' 没有下标成员:

var coor = ship[index]

我试过了

var coor = ship?[index] as? Coordinate

但是我得到这个错误:"Cannot use optional chaining on non-optional value of type 'Ship'"

这是我的 Ship class:

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")
    }
}

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

您必须明确地向 class 添加下标支持才能使用下标语法,例如ship[index].

以下是涵盖订阅以及如何向您的 class 添加订阅的文档:

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

Ship 对象的下标添加到 return 可选 Coordinate:

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

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

在 Swift 3

中遇到过类似问题
Type '() -> [myObject]' has no subscript members

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

即下面的代码是罪魁祸首

dataModel.myFunction

已解决 dataModel.myFunction()

对于我的代码:

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

    }
    return intArray
}

我收到以下错误:

error: type '(Int) -> ()' has no subscript members intArray.append[n]

表示append函数不使用下标或[]

更改

的行
intArray.append[n]

至:

intArray.append(n)

将解决整个问题!