「タイプ 'Ship'には下付きのメンバーがありません」というエラーが表示されます。
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
から)ロードすると、オブジェクトは配列内にあるように見えますか?それらをどうやって手に入れますか?!
Ship
オブジェクトに添え字を追加して、オプションのCoordinate
を返します。
subscript(index: Int) -> Coordinate? {
guard let coordinate = shipCoors?[index] else {
return nil
}
return coordinate
}
shipCoors
は[Coordinate]?
(オプションの配列)として宣言されているため、Ship
がshipCoors
に配列を持たないリスクがあります。この場合、nil
を返しますが、代わりに必要なものを返すことができます。
Swift 3で同様の問題があった
_Type '() -> [myObject]' has no subscript members
_
私の場合、関数呼び出し「()」に括弧を追加しないという単純なケースでした。スクールボーイエラー。
すなわち、以下のコードが犯人でした
_dataModel.myFunction
_
dataModel.myFunction()
で解決
添え字構文を使用するには、クラスに添え字サポートを明示的に追加する必要があります。 ship[index]
。
添え字とクラスに添え字を追加する方法を説明するドキュメントは次のとおりです。
私のコードの場合:
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)
問題全体を解決します!