小编Pin*_*ink的帖子

SwiftUI.PreviewProvider MainActor 隔离警告

我收到两个有关 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)

concurrency swift swiftui xcode-previews

9
推荐指数
0
解决办法
316
查看次数

变异ArraySlice会实例化一个新的数组实例吗?

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)那么在后台会发生什么.我是否通过改变数组切片来实例化一个新数组?提前致谢.

arrays copy-on-write swift

6
推荐指数
1
解决办法
239
查看次数