我正在开发一个支持 iOS 14 及更高版本的应用程序,但我想使用一些 SwiftUI 3 属性包装器,例如@FocusState.
我该如何解决该Stored properties cannot be marked potentially unavailable错误?
这是我们代码的简化版本,它适用于 Xcode 13,但无法使用 Xcode 14 进行编译。
struct MyView: View {
enum Field: Hashable {
case username
}
@State private var myText: String = ""
@available(iOS 15, *)
@FocusState private var focusedField: Field?
var body: some View {
if #available(iOS 15, *) {
TextEditor(text: $myText)
.focused($focusedField, equals: .username)
} else {
TextEditor(text: $myText)
}
}
}
Run Code Online (Sandbox Code Playgroud)
我无法将计算属性与后备存储解决方法一起使用,因为计算属性不能具有属性包装器。
除了几乎相同的副本之外,我还可以使用其他解决方法吗MyView?
一种可能的方法是将所有依赖部分分离到一个子视图中,并将其标记为可用于新操作系统。
这是一个演示:
struct MyView: View {
enum Field: Hashable {
case username
}
@State private var myText: String = ""
@available(iOS 15, *) // << here !!
struct NewTextEditor: View {
@Binding var text: String
@FocusState private var focusedField: Field?
var body: some View {
TextEditor(text: $text)
.focused($focusedField, equals: .username)
}
}
var body: some View {
if #available(iOS 15, *) {
NewTextEditor(text: $myText)
} else {
TextEditor(text: $myText)
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
780 次 |
| 最近记录: |