具有属性包装器的不可用属性

Vla*_*eys 5 ios swift swiftui

我正在开发一个支持 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

Asp*_*eri 4

一种可能的方法是将所有依赖部分分离到一个子视图中,并将其标记为可用于新操作系统。

这是一个演示:

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)