小编Gen*_*ich的帖子

当 SwiftUI 列表选择更改时,如何防止 Core Data 获取请求重置其谓词?

示例应用程序具有实体的核心数据模型,Garden该模型与实体具有一对多关系FruitList用户被邀请使用 SwiftUI在恒定编辑模式下和选择参数集在花园里采摘水果。用户的选择将反映在核心数据关系中。问题是,当用户搜索某些内容然后尝试选择水果时,搜索将被重置。我假设这是预定义的行为,并想知道如何覆盖它,以便搜索持续存在,即用户通过搜索设置的谓词仍然处于活动状态,并且列表仍然需要过滤。

struct FruitPicker: View {
    @FetchRequest(
        sortDescriptors: [NSSortDescriptor(keyPath: \Fruit.name, ascending: true)],
        animation: .default)
    private var fruits: FetchedResults<Fruit>
    
    @Binding var selection: Set<Fruit>
    @State var searchText = ""
    
    var body: some View {
        List(fruits, id: \.self, selection: $selection) {
            Text($0.name ?? "")
        }
        .searchable(text: query)
        .environment(\.editMode, .constant(EditMode.active))
        .navigationTitle("Garden")
    }
    
    var query: Binding<String> {
        Binding {
            searchText
        } set: { newValue in
            searchText = newValue
            
            fruits.nsPredicate = newValue.isEmpty ? nil : NSPredicate(format: "name CONTAINS[cd] %@", …
Run Code Online (Sandbox Code Playgroud)

core-data swiftui

5
推荐指数
1
解决办法
676
查看次数

如何对依赖自动语法协议的字符串使用插值?

我正在尝试解决一个看似简单的问题:在 SwiftUIText视图中向用户显示免费试用条款。我设置了一个单位字符串"Week"和 a value,可以从 1 切换到 2。为了处理复数,我利用了 iOS 15 上的自动语法协议。我的Localizable.strings文件中已经准备好了一个字符串,如下所示:

"Subscription period: %lld %@" = "^[%lld ^[%@](grammar: { partOfSpeech: \"noun\" })](inflect: true)";
Run Code Online (Sandbox Code Playgroud)

为了构建字符串,我需要使用字符串插值来添加单词“free”。我知道在字符串文件中添加单词可以解决问题,但我不想这样做。我想普遍使用该字符串,不一定与免费试用有关。我不明白为什么我不能调用一些 init,向它传递一个密钥,并返回一个我可以根据需要进行插值的纯字符串。我已经尝试了很多方法,在所附的代码片段中展示了这些方法。要么找不到该字符串,要么未应用自动语法协议。似乎有String.LocalizationValue.StringInterpolation结构,但我不知道如何使用它,因为没有任何文档。我究竟做错了什么?我将不胜感激任何帮助!

"Subscription period: %lld %@" = "^[%lld ^[%@](grammar: { partOfSpeech: \"noun\" })](inflect: true)";
Run Code Online (Sandbox Code Playgroud)

您可以在此处下载示例项目。

string nslocalizedstring ios swift swiftui

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

标签 统计

swiftui ×2

core-data ×1

ios ×1

nslocalizedstring ×1

string ×1

swift ×1