gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 11:22:58 24 4
gpt4 key购买 nike

我在 Swift 中创建了一个简单的通用网格数据结构,如下所示。基本上它创建了一个类型为 T 的可选数组?并用 nil 初始化数组。但是,当我尝试将一个网格元素显式设置回 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
}
}

参见 Modifying Value Types from Within Instance Methods在 Swift 书中:

Modifying Value Types from Within Instance Methods

Structures and enumerations are value types. By default, the properties of a value type cannot be modified from within its instance methods.

However, if you need to modify the properties of your structure or enumeration within a particular method, you can opt in to mutating behavior for that method. ...

关于ios - 在 Swift 中将 nil 分配给泛型可选值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25359210/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com