类型没有下标成员?

Mr_*_*ime 8 nscoding optional subscript ios swift

我收到错误"Type'Ship'在我尝试时没有下标成员:

var coor = ship[index]
Run Code Online (Sandbox Code Playgroud)

我试着这样做

var coor = ship?[index] as? Coordinate
Run Code Online (Sandbox Code Playgroud)

但我收到此错误:"无法在'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")
    }
}
Run Code Online (Sandbox Code Playgroud)

Coordinate班也是类型的NSObject, NSCoding,等等的对象似乎是在阵列中,当我加载它们(从NSUserDefaults)?我怎么把它们拿出来?!

JAL*_*JAL 10

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

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

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


Nai*_*hta 7

在Swift 3中有类似的问题

Type '() -> [myObject]' has no subscript members
Run Code Online (Sandbox Code Playgroud)

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

即以下代码是罪魁祸首

dataModel.myFunction
Run Code Online (Sandbox Code Playgroud)

解决了 dataModel.myFunction()