3

I'm trying to declare a property with an array of any type T. But I'm getting compiler error - Use of undeclared type 'T'. Below is the class that I created with 2 properties.

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

Please let me know how to declare an array of any type using Generics in Swift. I've tried the below options:

{
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

不能专门化非泛型类型“人”

错误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 回答