小编agm*_*der的帖子

不允许从后台线程发布更改;确保从主线程发布值(通过像 receive(on:) 这样的运算符)

我正在使用 Swift 和 SwiftUI 构建一个应用程序。在 MainViewModel 中,我有一个函数调用 Api 从 url 获取 JSON 并将其反序列化。这是在 async/await 协议下进行的。问题是下一个,我从 xcode 收到了下一条评论:“不允许从后台线程发布更改;确保在模型更新时从主线程发布值(通过像 receive(on:) 这样的运算符)。” 在这部分代码中:

func getCountries() async throws{
    
        countries = try await MainViewModel.countriesApi.fetchCountries() ?? []
}
Run Code Online (Sandbox Code Playgroud)

谁称这个为:

func fetchCountries() async throws -> [Country]? {

    guard let url = URL(string: CountryUrl.countriesJSON.rawValue ) else {
        print("Invalid URL")
        return nil
    }
    let urlRequest = URLRequest(url: url)
    do {
        let (json, _) = try await URLSession.shared.data(for: urlRequest)

        if let decodedResponse = try? JSONDecoder().decode([Country].self, from: json) {
            debugPrint("return decodeResponse") …
Run Code Online (Sandbox Code Playgroud)

async-await swift swiftui

17
推荐指数
2
解决办法
1万
查看次数

如何使用@FocusState 和 SwiftUI 保持键盘打开而不弹跳?

我正在尝试开发一个用户必须输入他的姓名的视图。这两个文本字段有一个 FocusState。一切都很顺利,当焦点改变他的目标时,就不会出现一点反弹。 弹跳应用程序

我不知道我的代码中针对此问题发生了什么。这是我的代码:

struct OnboardingViewPart2: View {

enum Field: Hashable{
    case name
    case surname
}

@State var displayName         = ""
@State var showImagePicker     = false
@State var isSomePhotoSelected = false
@State var displaySurname      = ""
@FocusState var focusedField : Field?


// For image picker
@State var imageSelected: UIImage = UIImage(systemName: "person.fill")!
@State var sourceType: UIImagePickerController.SourceType = .photoLibrary

var body: some View {
    
    VStack(alignment: .center, spacing: 20, content: {
        
Run Code Online (Sandbox Code Playgroud)

//其他代码

        // MARK: Textfield group
        Group{
            
            TextField("Add your name here...", text: $displayName) …
Run Code Online (Sandbox Code Playgroud)

textfield swiftui

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

标签 统计

swiftui ×2

async-await ×1

swift ×1

textfield ×1