类型没有下标成员?

时间:2016-03-21 17:44:13

标签: ios swift optional nscoding subscript

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

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)?我怎么把它们拿出来?!

4 个答案:

答案 0 :(得分:10)

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

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

shipCoors被声明为[Coordinate]?(可选数组),因此Ship无法在shipCoors中拥有数组。在这种情况下,我返回nil,但您可以返回任何您想要的内容。

答案 1 :(得分:7)

在Swift 3中有类似的问题

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

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

即。以下代码是罪魁祸首

dataModel.myFunction

解决dataModel.myFunction()

答案 2 :(得分:2)

您必须为该类显式添加下标支持才能使用下标语法,例如: ship[index]

以下是涵盖下标以及如何向您的班级添加下标的文档:

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

答案 3 :(得分:0)

我的代码:

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)

会解决整个问题!