小编Han*_*ash的帖子

选择器选择“0”无效并且没有关联的标签

我有一个包含交易类别的类(请参阅下面的示例代码),用户可以在设置过程中从中选择一个子集以在应用程序中使用。稍后在事务输入期间,如果未选择类中的第一个类别(在设置期间)并且选择器状态参数初始化为零,我会看到控制台消息“选择器:选择“0”无效并且没有关联的标签,这将给出未定义的结果”。事实上,如果状态参数初始化为 5 并且在设置过程中未选择第 5 个类别,它也会给出相同的警告。

我的问题是如何初始化状态参数,这样我就不会收到此选择器警告?

从控制台消息中我认为问题出在 ForEach 循环而不是条件。但如果删除条件if categories.catItem[item].catInUse == true {,我就看不到警告。

例如,在下面的代码中,如果在应用程序设置期间未选择类别Cat A(catInUse 为 false)并且交易条目选择器状态参数为, @State private var entryCat: Int = 0我将看到上面的控制台警告消息。类别Cat A仍然在列表中 - 只是没有显示。

struct getCategory: View {

    @EnvironmentObject var categories: Categories

    @State private var entryCat: Int = 0

    var body: some View {

        Section(header: Text("Select Category")) {

            Picker(selection: $entryCat, label: Text("")) {
                ForEach(0 ..< categories.catItem.count, id: \.self) { item in
                    if categories.catItem[item].catInUse == true {
                        Text(categories.catItem[item].catName)
                            .bold()
                    } …
Run Code Online (Sandbox Code Playgroud)

swift swiftui

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

Swift 中的延迟内部任务修饰符

如何在 Swift 中的 Task 修饰符中调用 defer ?我想延迟执行清理操作。这包括将loadingState设置为.idle并将selectedImage设置为nil等。无论是否抛出异常,延迟代码都应该触发。

Task {
    do {
        defer {
            print("DEFER")
            self.selectedImage = nil
            loadingState = .idle
            chatText = ""
        }
            
        try await sendMessage()
        print("")
    } catch {
        print(error.localizedDescription)
    }
}
Run Code Online (Sandbox Code Playgroud)

但我收到以下编译错误:

主要参与者隔离的属性“loadingState”不能从主要参与者发生突变

任何帮助表示赞赏。

更新:

Task { @MainActor in
    
    do {
        
        defer {
            print("DEFER")
            loadingState = .idle
            self.selectedImage = nil
            loadingState = .idle
            chatText = ""
        }
        
        try await sendMessage()
        
    } catch {
        print(error.localizedDescription)
    }
    
}
Run Code Online (Sandbox Code Playgroud)

更新2

这是产生类似错误的最少代码:

enum SampleError: Error {
    case operationFailed
}

func doSomething() …
Run Code Online (Sandbox Code Playgroud)

swift

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

具有圆角半径的 UILabel View 在 iOS 17 Beta 上不起作用 - Xcode 15 Beta

我正在使用 UILabel 视图,并设置了它的角半径,以便使用运行时属性使其圆角。 在此输入图像描述

这是它在 iOS 16.x 或更低版本(任何 iOS 16 或更低版本)上的显示方式。 在此输入图像描述

这就是 iOS 17 Beta 上的样子。 在此输入图像描述

该点看起来像一个正方形。不知道如何解决这个问题。

在多台设备上进行测试,方形问题仅出现在 iOS 17 Beta 上。

storyboard uilabel ios ios17

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

更新 SwiftData 中的数据

我正在尝试更新 SwiftData 中的数据。然而,该文档实际上只是:

func update(expressions: [String : NSExpression], 
    model: any PersistentModel.Type,
    where predicate: NSPredicate? = nil) throws -> Bool
Run Code Online (Sandbox Code Playgroud)

作为一名新开发人员,我不知道其中大部分意味着什么或如何使用它。我的代码如下:

try? context.update(expressions ["teamScores":NSExpression(format: "\(teamScores)")], model: CounterModel.self)
Run Code Online (Sandbox Code Playgroud)

它失败了exception of type NSException

老实说,我没能尝试太多。截至撰写本文时,这样一个新框架实际上已经在 6 天前发布,除了设置模型、保存数据和查询数据库之外,没有太多文档或示例。

swift swift-data swiftui

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

Foundation/SwiftData 中的 #Predicate 宏是否支持不区分大小写的搜索?

我正在测试新的 SwifData 框架并使用新的 #Predicate 宏,并意识到它不支持不区分大小写的搜索。该宏不能与 lowercased() 方法或 localizedLowercase 属性一起使用,因此似乎无法像我们过去使用 NSPredicate 和 [c] 属性那样创建不区分大小写的谓词。

   var predicate = #Predicate<Book> {
  $0.title.localized().contains(search) }
Run Code Online (Sandbox Code Playgroud)

错误:此谓词不支持 lowercased() 函数(来自宏“Predicate”)

我想知道是否有任何解决办法。谢谢

predicate swift swift-data

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

Swift数据关系

我正在使用新的 swiftData 我试图理解这些关系是如何工作的,我很高兴必须对类进行建模:

我的应用程序上的每个航班都包含许多机组人员,我编写了如下代码所示的关系,但不断收到错误“致命错误:反向关系不存在”

我们应该如何写这个关系:

@Model
class Flight {
    @Attribute(.unique) var flightID: UUID
    var typeOfFlight: String
    var flightDateUTC : Date
    var flightNumber: String?
    
    @Relationship(.cascade) var flightData: FlightData
    @Relationship(.cascade) var flightTime : FlightTime
    @Relationship(.noAction) var aircraft : Aircraft?
    @Relationship(inverse: \CrewModel.name)
    var crews : [CrewModel]? //<-------------------------------
    
    init(flightID: UUID, typeOfFlight: String, flightDateUTC: Date, flightNumber: String? = nil, flightData: FlightData, flightTime: FlightTime, aircraft: Aircraft? = nil, crews: [CrewModel]? = nil) {
        self.flightID = flightID
        self.typeOfFlight = typeOfFlight
        self.flightDateUTC = flightDateUTC
        self.flightNumber = flightNumber
        self.flightData …
Run Code Online (Sandbox Code Playgroud)

swift swift-data

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

iOS 模拟器未运行

我正在尝试打开模拟器,以便模拟 Flutter 应用程序。但是,我的模拟器遇到了问题。当我尝试打开它(我使用它open -a Simulator)时,模拟器永远不会打开。当我尝试在菜单栏中创建新模拟器时,单击“新模拟器”选项卡上的“下一步”不会执行任何操作。另外,我不确定这是否相关,但在“新模拟器”选项卡中,有模拟器名称、设备类型和操作系统版本,我无法选择操作系统版本,它只是空白,没有其他选择。

我尝试过重新启动计算机、更新计算机并重新安装 Xcode。还安装/重新安装了命令行工具。

以下是更多信息:

macOS 版本:macOS 14.0 (23A344)

Xcode 版本:Xcode 15.0 构建版本 15A240d

模拟器版本:版本15.0 (1015.2) SimulatorKit 935.1 CoreSimulator 920.6

有谁知道可能是什么原因导致这个问题?

xcode ios-simulator flutter

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

Swift Charts 的 ChartXVisibleDomain 挂起或崩溃

如果我在任何地方(Xcode Simulator、Playground 等)使用以下Swift Charts ,它会挂起或崩溃。 Chart一旦我删除chartXVisibleDomain修改器,一切都会正常。还有其他人遇到同样的问题和/或知道如何解决它吗?我使用的是 Xcode 版本 15.0 (15A240d)。

import SwiftUI
import Charts

struct ContentView: View {
    
    let data: [(day: Date, value: Int)] = [
        (Calendar.current.date(byAdding: .day, value: 0,   to: .now)!, 1),
        (Calendar.current.date(byAdding: .day, value: -1,  to: .now)!, 2),
        (Calendar.current.date(byAdding: .day, value: -3,  to: .now)!, 3),
        (Calendar.current.date(byAdding: .day, value: -10, to: .now)!, 4),
        (Calendar.current.date(byAdding: .day, value: -20, to: .now)!, 5)
    ]
    
    var body: some View {
        Chart(data, id: \.day) { (day, value) in
            BarMark(
                x: …
Run Code Online (Sandbox Code Playgroud)

swift swiftui swiftui-charts

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

如何复制 NSMutableAttributedString

我想知道如何才能复制一份NSMutableAttributedString. 我有一个名为的属性text,我想在某个时刻保存其内容并在发生某些情况时恢复到它。我尝试创建一个名为textCopywhere 我可以将其保存到的属性@property (nonatomic, copy),但是当我这样做时出现运行时错误:

-[NSConcreteAttributedString insertAttributedString:atIndex:]:发送到实例的无法识别的选择器。

我将如何实现这个目标?

每当我将 设为 时,我都会收到此NSMutableAttributedString消息@property (nonatomic, copy)。我不明白为什么这行不通。NSMutableAttributedString一般来说,无论我是否使用它的 setter 方法,复制参数似乎都不起作用。

objective-c nsattributedstring

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

这个 Swift TimeZone 作为另一个时区假设中日期的缩写有什么问题?

在具有以下 Swift 代码的 Xcode Playground 中,我得到了带注释的输出。给定 MST TimeZone 对象和该 MST TimeZone 的 MDT TimeZone 中的日期,我没有收到预期的 MDT TimeZone 缩写输出。我对此函数不了解什么,以及如何获得所需的输出,以找出给定日期在给定当前示例 MST 时区的两个可能时区中的哪一个?

// Daylight saving time (MDT) 2021 in Colorado began at 2:00 AM on Sunday, March 14
let mstDate = Date(timeIntervalSinceReferenceDate: 636327068) // "Mar 1, 2021 at 2:31 PM"
let mdtDate = Date(timeIntervalSinceReferenceDate: 637709468) // "Mar 17, 2021 at 3:31 PM"
let mstTimeZone = TimeZone(abbreviation: "MST")!
let mdtTimeZone = TimeZone(abbreviation: "MDT")!

mstTimeZone.abbreviation(for: mstDate) // expected MST, got MST
mstTimeZone.abbreviation(for: mdtDate) // …
Run Code Online (Sandbox Code Playgroud)

timezone date timezone-offset swift

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