【问题标题】:Use of undeclared type 'T' when declared array of any type in Swift在 Swift 中声明任何类型的数组时使用未声明的类型“T”
【发布时间】:2014-09-01 19:05:04
【问题描述】:

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

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

请告诉我如何在 Swift 中使用泛型声明任何类型的数组。我尝试了以下选项:

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

【问题讨论】:

    标签: arrays swift swift-playground generics


    【解决方案1】:

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

    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 中不需要尾随分号,除非您在同一行中放置多个语句

    【讨论】:

    • 我们如何为扩展函数做等价的?
    【解决方案2】:

    我正在解决一般性错误。

    由于其他原因,我收到以下错误。

    错误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) {
    
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多