我收到错误“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
)?我怎么把它们拿出来?!
答案 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]
。
以下是涵盖下标以及如何向您的班级添加下标的文档:
答案 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)
会解决整个问题!