我收到两个有关 SwiftUI 视图文件并发性的(重复)警告。当我在代码库的其他部分添加 Swift Concurrency 后,这种情况就开始发生了。
完整的警告是: SwiftUI.PreviewProvider Main actor-isolated static property '_previews'不能用于满足此处声明的非隔离协议要求'_previews'
警告是由下面的 CloseButton_Previews 引起的。这是完整的文件:
import SwiftUI
import DesignSystem
struct CloseButton: View {
private enum Constants {
static let closeIconSize = CGSize(width: 32, height: 32)
}
var body: some View {
HStack {
IconButton {
print("Close button was tapped")
} icon: {
Icon.closeBig
.resizable()
.symbolRenderingMode(.hierarchical)
.foregroundColor(.gray)
.frame(
width: Constants.closeIconSize.width,
height: Constants.closeIconSize.height,
alignment: .center
)
}
}
.frame(
width: Spacing.minimumTappableLength,
height: Spacing.minimumTappableLength,
alignment: .center
)
}
}
struct CloseButton_Previews: PreviewProvider …
Run Code Online (Sandbox Code Playgroud) var absences = [0, 2, 0, 4, 0, 3, 1, 0]
let midpoint = absences.count / 2
var firstHalf = absences.prefix(upTo: midpoint)
let secondHalf = absences.suffix(from: midpoint)
Run Code Online (Sandbox Code Playgroud)
来自Apple的报价:
firstHalf和secondHalf slice都不会分配任何新的存储空间.相反,每个都提供了缺席数组存储的视图.
当我尝试变异firstHalf
如下:
firstHalf[1] = 19
Run Code Online (Sandbox Code Playgroud)
firstHalf
更改的值但原始数组absences
保持不变(firstHalf[1]
等于19,而absences[1]
等于2)那么在后台会发生什么.我是否通过改变数组切片来实例化一个新数组?提前致谢.