web-dev-qa-db-ja.com

タイプには下付き文字メンバーがありませんか?

「タイプ '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から)ロードすると、オブジェクトは配列内にあるように見えますか?それらをどうやって手に入れますか?!

8
Mr_CryptoPrime

Shipオブジェクトに添え字を追加して、オプションのCoordinateを返します。

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

shipCoors[Coordinate]?(オプションの配列)として宣言されているため、ShipshipCoorsに配列を持たないリスクがあります。この場合、nilを返しますが、代わりに必要なものを返すことができます。

10
JAL

Swift 3で同様の問題があった

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

私の場合、関数呼び出し「()」に括弧を追加しないという単純なケースでした。スクールボーイエラー。

すなわち、以下のコードが犯人でした

_dataModel.myFunction
_

dataModel.myFunction()で解決

7
Naishta

添え字構文を使用するには、クラスに添え字サポートを明示的に追加する必要があります。 ship[index]

添え字とクラスに添え字を追加する方法を説明するドキュメントは次のとおりです。

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

2
Daniel Hall

私のコードの場合:

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)

問題全体を解決します!

0
Honey