在Swift中声明任何类型的数组时使用未声明的类型'T'

use*_*840 3 arrays generics swift swift-playground

我正在尝试使用任何类型T的数组声明属性.但是我收到了编译错误 - 使用未声明的类型'T'.下面是我用2个属性创建的类.

class Product {
 var productName: String;
 var items: Array<T>
}
Run Code Online (Sandbox Code Playgroud)

请让我知道如何在Swift中使用Generics声明任何类型的数组.我尝试过以下选项:

{
var items: Array<T>;
var items = Array<T>();
var items = [T]();
}
Run Code Online (Sandbox Code Playgroud)

Ant*_*nio 6

您必须在类声明中定义泛型类型:

class Product<T> {
    var productName: String;
    var items: Array<T>
}
Run Code Online (Sandbox Code Playgroud)

当然,由于该类具有未初始化的非可选变量,因此您必须将它们内联初始化:

class Product<T> {
    var productName: String = ""
    var items: Array<T> = Array<T>()
}
Run Code Online (Sandbox Code Playgroud)

让他们成为可选项:

class Product<T> {
    var productName: String?
    var items: Array<T>?
}
Run Code Online (Sandbox Code Playgroud)

定义初始化程序:

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

    init(productName: String, items: Array<T>) {
        self.productName = productName
        self.items = items
    }
}
Run Code Online (Sandbox Code Playgroud)

或它们的任何组合.

请注意,除非您在同一行中放置多个语句,否则swift中不需要使用尾随分号

  • 我们如何做扩展功能的等价物? (2认同)