繁体   English   中英

在Swift中将nil分配给泛型可选

[英]Assigning nil to generic optionals in Swift

我已经在Swift中创建了一个简单的通用网格数据结构,如下所示。 基本上,它会创建类型为T的可选数组? 并使用nil初始化数组。 但是,当我尝试将一个grid元素显式设置为nil时,编译器会抱怨一些我不太了解的东西。

struct Grid<T> {
    let columns: Int, rows: Int
    var grid: [T?]
    init(columns: Int, rows: Int) {
        self.rows = rows
        self.columns = columns
        grid = Array(count: rows * columns, repeatedValue: nil)
    }

    func test() {
        grid[0] = nil
    }
}

添加test()函数时,编译器强烈要求:

Grid.swift:26:13: '@lvalue $T7' is not identical to 'T?'

该错误信息是令人误解的。 test()方法修改结构中属性的值,因此必须将其标记为“变异”:

struct Grid<T> {
    // ...

    mutating func test() {
        grid[0] = nil
    }
}

请参见Swift书中的从实例方法内部修改值类型

从实例方法中修改值类型

结构和枚举是值类型 默认情况下,不能从其实例方法中修改值类型的属性。

但是,如果你需要一个特定的方法修改您的结构或枚举的属性,你可以选择参加变异行为该方法。 ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM