gpt4 book ai didi

xcode - 在 Xcode11 Beta 4 中使用带有 SwiftUI 的字符串(格式 : , args)时出错

转载 作者:行者123 更新时间:2023-12-01 09:12:29 31 4
gpt4 key购买 nike

升级到 Xcode 11 Beta 4 后,我在使用带有 @State 属性的 String(format: , args) 时开始看到一个错误。请参阅下面的代码。第二个 Text 行抛出错误:

Expression type 'String' is ambiguous without more context

Text 的 1、3 和 4 工作得很好。

struct ContentView : View {
@State var selection = 2

var body: some View {
VStack {
Text("My selection \(selection)") // works
Text("My selection \(String(format: "%02d", selection))") // error
Text("My selection \(String(format: "%02d", Int(selection)))") // works
Text("My selection \(String(format: "%02d", $selection.binding.value))") // works
}
}
}

我知道这是 Beta 版软件,但很好奇是否有人能看出这种行为的原因,或者这只是一个错误。如果这不能解释,我会提交雷达。

最佳答案

在 beta 4 中,属性包装器的实现略有变化。在 beta 3 中,您的 View 被编译器重写为:

internal struct ContentView : View {
@State internal var selection: Int { get nonmutating set }
internal var $selection: Binding<Int> { get }
@_hasInitialValue private var $$selection: State<Int>
internal var body: some View { get }
internal init(selection: Int = 2)
internal init()
internal typealias Body = some View
}

在 Beta 4 上,它执行以下操作:

internal struct ContentView : View {
@State @_projectedValueProperty($selection) internal var selection: Int { get nonmutating set }
internal var $selection: Binding<Int> { get }
@_hasInitialValue private var _selection: State<Int>
internal var body: some View { get }
internal init(selection: Int = 2)
internal init()
internal typealias Body = some View
}

现在我猜:这种变化让编译器更难推断变量的类型?请注意,另一个可行的替代方法是通过将 selection 转换为 Int 来帮助编译器:

Text("My selection \(String(format: "%02d", selection as Int))")

关于xcode - 在 Xcode11 Beta 4 中使用带有 SwiftUI 的字符串(格式 : , args)时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57086249/

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