小编kit*_*ian的帖子

SwiftUI @MainActor 失去全球演员

从我的角度来看,我正在调用一个ObservableObject@StateObject。该类内部有一个函数,整个类都被标记为@MainActor。在我看来,有一个TextFieldwithonChange修饰符,可以通过 执行调用该函数viewModel.funcname

Xcode is complaining with an error of:

Converting function value of type '@MainActor (String) -> Void' to '(String) -> Void' loses global actor 'MainActor'
Run Code Online (Sandbox Code Playgroud)

I've been researching this for hours now and have found little to nothing. Even Apple's own docs say to simply use await but that doesn't work, at least not the many ways I've tried it.

This is the code within my view: …

concurrency multithreading swiftui mainactor

11
推荐指数
1
解决办法
7706
查看次数

SwiftUI 使用 MapKit 实现地址自动完成

我有一个表格,用户可以在其中输入他们的地址。虽然他们总是可以手动输入,但我还想为他们提供一种具有自动完成功能的简单解决方案,以便他们可以开始输入地址,然后从列表中点击正确的地址并让它自动填充各个字段。

我首先使用 jnpdx 的 Swift5 解决方案 - /sf/answers/4699196351/

但是,有两个问题我似乎无法解决:

  1. 我需要将结果仅限于美国(不仅仅是美国大陆,而是整个美国,包括阿拉斯加、夏威夷和波多黎各)。我知道 MKCooperativeRegion 如何与中心点一起使用,然后缩放扩展,但它似乎不适用于地址搜索的结果。

  2. 结果的返回仅提供标题和副标题,我需要实际提取所有单独的地址信息并填充我的变量(即地址、城市、州、邮政编码和邮政编码分机号)。如果用户有公寓号或套房号,他们会自己填写。我的想法是创建一个在点击按钮时运行的函数,以便根据用户的选择分配变量,但我不知道如何提取所需的各种信息。苹果的文档一如既往地糟糕,我还没有找到任何解释如何做到这一点的教程。

这是针对最新的 SwiftUI 和 XCode (ios15+)。

我创建了一个用于测试的虚拟表单。这是我所拥有的:

import SwiftUI
import Combine
import MapKit

class MapSearch : NSObject, ObservableObject {
    @Published var locationResults : [MKLocalSearchCompletion] = []
    @Published var searchTerm = ""
    
    private var cancellables : Set<AnyCancellable> = []
    
    private var searchCompleter = MKLocalSearchCompleter()
    private var currentPromise : ((Result<[MKLocalSearchCompletion], Error>) -> Void)?
    
    override init() {
        super.init()
        searchCompleter.delegate = self
        searchCompleter.region = MKCoordinateRegion()
        searchCompleter.resultTypes = MKLocalSearchCompleter.ResultType([.address])
        
        $searchTerm
            .debounce(for: .seconds(0.5), scheduler: …
Run Code Online (Sandbox Code Playgroud)

mapkit mkcoordinateregion mklocalsearch swiftui

10
推荐指数
1
解决办法
5042
查看次数

iOS16 上键盘的 SwiftUI ToolbarItemGroup

由于新的 NavigationStack 有相当多的问题,包括此时相当严重的内存泄漏,我仍在使用旧的 NavigationView ,构建目标为 iOS 15+。

但是,运行 iOS 16 的设备不再在键盘中显示 ToolbarItemGroup 内容。ToolbarItem(placement: .navigationBarTrailing) 工作正常,但 ToolbarItemGroup(placement: .keyboard) 不再显示内容。

这是我用于键盘工具栏项目的代码:

.toolbar {
    ToolbarItemGroup(placement: .keyboard) {
        HStack {
            Spacer()
            Button {
                isFocused = nil
            } label: {
                Image(systemName: "keyboard.chevron.compact.down")
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这应该在键盘顶部显示图像,允许用户在点击时分散注意力。它在 iOS 15 上完美运行,但在运行 iOS 16 的设备上没有任何显示。

我正在真实设备上进行测试,而不是模拟器。

keyboard toolbar swiftui

7
推荐指数
1
解决办法
1600
查看次数