3

任意の型 T の配列でプロパティを宣言しようとしていますが、コンパイラ エラーが発生します - 宣言されていない型 'T' の使用。以下は、2 つのプロパティで作成したクラスです。

class Product {
 var productName: String;
 var items: Array<T>
}

Swift で Generics を使用して任意の型の配列を宣言する方法を教えてください。以下のオプションを試しました:

{
var items: Array<T>;
var items = Array<T>();
var items = [T]();
}
4

2 に答える 2

6

クラス宣言でジェネリック型を定義する必要があります。

class Product<T> {
    var productName: String;
    var items: Array<T>
}

もちろん、クラスには初期化されていない非オプションの変数があるため、インラインで初期化する必要があります。

class Product<T> {
    var productName: String = ""
    var items: Array<T> = Array<T>()
}

それらをオプションにします:

class Product<T> {
    var productName: String?
    var items: Array<T>?
}

初期化子を定義します。

class Product<T> {
    var productName: String
    var items: Array<T>

    init(productName: String, items: Array<T>) {
        self.productName = productName
        self.items = items
    }
}

またはそれらの任意の組み合わせ。

同じ行に複数のステートメントを入れない限り、swift では末尾のセミコロンは必要ないことに注意してください。

于 2014-09-01T19:11:48.887 に答える
-1

私は一般的にエラーに対処しています。

別の理由で次のエラーが発生していました。

エラー1

非ジェネリック型 'Person' を特殊化できません

エラー2

宣言されていない型 'T' の使用

少し異なる間違いを犯した場合:

protocol Person{
    associatedtype language
    func write(_ language: language)
    func read(_ language: language)
}

私は次のようにそれに準拠していました:

struct American: Person<T>{
    func read(_ language: T) {

    }
    func write(_ language: T) {

    }
}

しかし、代わりにこのように準拠する必要がありました。

struct American<T> : Person{
    func read(_ language: T) {

    }
    func write(_ language: T) {

    }
}
于 2018-10-11T02:59:43.230 に答える