类型没有下标成员?
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")
}
}
Coordinate
class也是NSObject, NSCoding
类型,等等...
当我加载它们时,这些对象似乎在数组中(来自 NSUserDefaults
)?我怎么把它们弄出来?!
您必须明确地向 class 添加下标支持才能使用下标语法,例如ship[index]
.
以下是涵盖订阅以及如何向您的 class 添加订阅的文档:
将 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)
将解决整个问题!
我尝试执行以下操作时收到错误消息“类型 '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")
}
}
Coordinate
class也是NSObject, NSCoding
类型,等等...
当我加载它们时,这些对象似乎在数组中(来自 NSUserDefaults
)?我怎么把它们弄出来?!
您必须明确地向 class 添加下标支持才能使用下标语法,例如ship[index]
.
以下是涵盖订阅以及如何向您的 class 添加订阅的文档:
将 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)
将解决整个问题!