SwiftUI 遇到Simultaneous accesses to XXX, but modification requires exclusive access的解决办法

本质上这个问题是一个系统bug,swiftUI中,如果你的List下不完全是依靠Foreach加载的core data的数据的话(即,你在list中添加了其他的View,例如自己写了个自定义的Title等),而你又提供了删除或者移动row的方法时,就会出现这种错误。

这是由于swiftUI Foreach的onDelete的方法没有兼容上面所述的情况造成的

目前可以使用的的解决办法是这样的:
viewContext.perform {
            offsets.map { molts[$0] }.forEach(viewContext.delete)

            do {
                try viewContext.save()
            } catch {
                viewContext.rollback()
                userMessage = "\(error): \(error.localizedDescription)"
                displayMessage.toggle()
            }
}
在你的操作方法外,再套一层,调用viewContext.perform即可

SwiftUI CoreData entity/实体更新导致无法预览的问题

最近改动了某个entity的类型,取消了它的继承,preview突然就停止工作了,一直提示crash,直接调用以下方法,清除之前的preview设定即可,因为preview里还保存了旧的设定,与新设定冲突,导致preview crash

xcrun simctl --set previews delete all

如何在SwiftUI中给字体加粗

swiftUI的文本设置,给了非常简单易懂的字体选择器,而如果想给字体加粗,该如何实现呢

这里就可以这样设置

TextField("Name", text: $name)
.font(Font.headline.weight(.light))

而可以选择的字体大小的,有如下的从小到大的名称

.caption
.footnote
.subheadline
.callout
.body
.headline
.title
.largeTitle

而字体粗细的选择,则有如下从细到粗的字段可选

.ultralight
.thin
.light
.regular
.medium
.semibold
.bold
.heavy
.black