当前位置: 首页 > news >正文

thinkphp网站源码下载抚顺网站seo

thinkphp网站源码下载,抚顺网站seo,目前比较火的外贸产品,wordpress 文章tag标签概述 在 SwiftUI 日常撸码过程中,头发尚且还算茂盛的小码农们经常会犯这样那样的错误。虽然犯这些错的原因都很简单,但有时想要快速准确的定位它们却并不容易。 况且这些错误还可能在模拟器和 Xcode 预览(Preview)表现的行为不甚…

在这里插入图片描述

概述

在 SwiftUI 日常撸码过程中,头发尚且还算茂盛的小码农们经常会犯这样那样的错误。虽然犯这些错的原因都很简单,但有时想要快速准确的定位它们却并不容易。

在这里插入图片描述

况且这些错误还可能在模拟器和 Xcode 预览(Preview)表现的行为不甚一致,这无疑加大了“驯服”它们的难度。

在本篇博文中,您将学到如下内容:

  • 概述
  • 1. TabView 每个标签页 tag 类型需要谨慎对待
  • 2. 视图中 @FetchRequest 定义不完整导致的崩溃
  • 总结

本文出现的问题在 Xcode 16.1 + iOS 18.1 中仍会存在。

相信学完本课后,小伙伴们倘若以后再遇到与此类似的问题,必将胸有成竹、迎刃而解。

那还等什么呢?Let‘s fix it!!!😉


本文对应的视频课在此,欢迎小伙伴们恣意观赏:

SwiftUI 撸码常见错误 2 例漫谈


1. TabView 每个标签页 tag 类型需要谨慎对待

在下面这个简单的例子中,点击 TabView 内部每个标签页竟然毫无反应!

在这里插入图片描述

下面上源代码,你能看出是哪里的问题吗?

enum TabTag: Int {case home = 0, worry, game, user
}@available(iOS 17, *)
@Observable
class Model {var currentSelectingTab = 0
}@available(iOS 17.0, *)
struct Main: View {@State var model = Model()var body: some View {NavigationStack {TabView(selection: $model.currentSelectingTab) {Text("Home").tabItem {Label("Home", systemImage: "house")}.tag(TabTag.home)Text("Worry").tabItem {Label("Worry", systemImage: "figure.fall")}.tag(TabTag.worry)Text("Game").tabItem {Label("游戏", systemImage: "gamecontroller.fill")}.tag(TabTag.game)Text("User").tabItem {Label("用户", systemImage: "person.fill")}.tag(TabTag.user)}.navigationTitle("SwiftUI 初学者常见错误")}        }
}

其实原因很简单:问题就出在 TabView 中每个标签页的 tag 类型上。我们实际使用的是 TabTag 类型,但是向 TabView 构造器 selection 形参绑定的却是整形类型。

所以这个问题解决起来也很容易,只需要将 Model 中对应的属性改为 TabTag 类型即可:

@available(iOS 17, *)
@Observable
class Model {var currentSelectingTab = TabTag.home
}

再次运行代码一切都回归正常了。

在这里插入图片描述

但是故事到这里并没有结束。假如我们将代码修改为如下形式,却是能够选择 TabView 中每个标签页的:

struct Main: View {@State var currentSelectingTab = 0var body: some View {NavigationStack {TabView(selection: $currentSelectingTab) {Text("Home").tabItem {Label("Home", systemImage: "house")}.tag(TabTag.home)Text("Worry").tabItem {Label("Worry", systemImage: "figure.fall")}.tag(TabTag.worry)Text("Game").tabItem {Label("游戏", systemImage: "gamecontroller.fill")}.tag(TabTag.game)Text("User").tabItem {Label("用户", systemImage: "person.fill")}.tag(TabTag.user)}}}
}

在上面的代码中,我们仅仅将原来在 Model 中 Int 类型的 currentSelectingTab 直接放到视图 @State 中,并将其与 TabView 的选中操作绑定起来而已。但是这样的话,同样造成了 TabView 标签页 tag 类型的不一致,为何又没有问题呢?

其实,这波“走位”表面看起来貌似可以恣意切换 TabView 各个标签页,但实际却是有问题的。为了拨开迷雾见青天,我们特地为 currentSelectingTab 状态增加了 onChange 监听器:

struct Main: View {@State var currentSelectingTab = 0var body: some View {NavigationStack {TabView(selection: $currentSelectingTab) {//...}}.onChange(of: currentSelectingTab) {_,new in// 永远不会进入此闭包中print("\(new)")}}
}

运行代码可以发现:尽管我们可以切换到不同标签页中,但我们的 currentSelectingTab 状态却从未发生过改变!

所以,最终我们发现了 SwiftUI 中一个“不一致”的场景:在 @Observable 对象中属性类型和 TabView 标签页 tag 不匹配会导致“正确”的交互行为(标签页无法切换),但在 @State 同样的属性却不能。

希望苹果在将来可以将它们一致化。

2. 视图中 @FetchRequest 定义不完整导致的崩溃

另一个隐蔽的问题涉及到 CoreData 为 SwiftUI 视图添加的 @FetchRequest 属性包装器。

@available(iOS 17, *)
struct WorriesView: View {    @FetchRequest(sortDescriptors: [.init(keyPath: \Worry.occurrenceTime, ascending: false)]) var worriesvar body: some View {NavigationStack {List {Section("最近担忧") {}Section("严重担忧") {}Section("其它担忧") {}}.navigationTitle("担忧终结者")}}
}

上面的代码貌似人畜无害,而且在 Xcode 预览中的显示也是无懈可击:

在这里插入图片描述

不过,如果我们编译并胆敢在模拟器或真机上运行上述代码,App 就会立即崩溃:

在这里插入图片描述

而且从提示来看,很难发现究竟是哪里出了问题。如果不是我们已将问题局限在 @FetchRequest 那行代码上,大家恐怕很难轻易找出罪魁祸首,更何况如果它匿影藏形隐身在海量视图中了。

经常在 SwiftUI 中使用 @FetchRequest 属性修饰器来获取 CoreData 数据的小伙伴们,应该能一眼看出上面代码中的问题,实际上它缺少了 FetchedResults 后半部分的定义,是不完整的:

@FetchRequest(sortDescriptors: 
[.init(keyPath: \V3_Worry.occurrenceTime, ascending: false)]) 
var worries: FetchedResults<V3_Worry>

只要将其补全即可。

该问题的另一个特点是它在 Xcode 预览中讳莫如深、深藏不露,只为在实际运行时给秃头码农们“当头一棒”,实属可恨!

不过,通过上面条分缕析的介绍,现在小伙伴们对它们一定能够火眼金睛、无所畏惧,棒棒哒!💯


更多 Xcode 预览调试中的技巧和陷阱,请小伙伴们移步如下链接观赏精彩的内容:

  • Xcode编写SwiftUI代码时一个编译通过但导致预览(Preview)崩溃的小陷阱
  • Xcode如何在预览(Preview)调试中避免与SwiftUI正常运行时环境不一致导致的崩溃
  • Xcode预览(Preview)显示List视图内容的一个Bug及解决
  • Xcode 15 预览 SwiftUI 视图中 @FetchRequest 查询结果不能正确刷新的解决

总结

在本篇博文中,我们讨论了 Xcode 16.1(iOS 18.1)中仍然存在 SwiftUI 的两个“鸱张鼠伏”、较难发现缘由小问题的“症状”和解决之道,希望可以帮助到大家。

感谢观赏,再会啦!😎


文章转载自:
http://pedophilia.pwkq.cn
http://bepelt.pwkq.cn
http://smilingly.pwkq.cn
http://gyro.pwkq.cn
http://thoraces.pwkq.cn
http://trikini.pwkq.cn
http://brusquerie.pwkq.cn
http://wosa.pwkq.cn
http://acidity.pwkq.cn
http://unprejudiced.pwkq.cn
http://rhombencephalon.pwkq.cn
http://tubulous.pwkq.cn
http://twp.pwkq.cn
http://lincolniana.pwkq.cn
http://magnetobiology.pwkq.cn
http://wearily.pwkq.cn
http://coronation.pwkq.cn
http://perennate.pwkq.cn
http://finochio.pwkq.cn
http://trigonometry.pwkq.cn
http://intraepithelial.pwkq.cn
http://anciently.pwkq.cn
http://wheelchair.pwkq.cn
http://skewback.pwkq.cn
http://egalite.pwkq.cn
http://lagrangian.pwkq.cn
http://officer.pwkq.cn
http://arise.pwkq.cn
http://arguably.pwkq.cn
http://megalocephaly.pwkq.cn
http://dreep.pwkq.cn
http://horticultural.pwkq.cn
http://monostrophe.pwkq.cn
http://scandaliser.pwkq.cn
http://caliology.pwkq.cn
http://rutland.pwkq.cn
http://squirely.pwkq.cn
http://voyeur.pwkq.cn
http://beld.pwkq.cn
http://marri.pwkq.cn
http://absolutism.pwkq.cn
http://petrography.pwkq.cn
http://glow.pwkq.cn
http://triplication.pwkq.cn
http://insidious.pwkq.cn
http://modeling.pwkq.cn
http://desmotropism.pwkq.cn
http://spinulescent.pwkq.cn
http://pickaxe.pwkq.cn
http://cohabitation.pwkq.cn
http://lotion.pwkq.cn
http://nymphomaniac.pwkq.cn
http://sheer.pwkq.cn
http://tchick.pwkq.cn
http://monooxygenase.pwkq.cn
http://inaugural.pwkq.cn
http://amylase.pwkq.cn
http://zwieback.pwkq.cn
http://millage.pwkq.cn
http://permanent.pwkq.cn
http://jasey.pwkq.cn
http://chlorpicrin.pwkq.cn
http://shining.pwkq.cn
http://xxix.pwkq.cn
http://adamantane.pwkq.cn
http://absorbent.pwkq.cn
http://abscondence.pwkq.cn
http://blabber.pwkq.cn
http://coastguard.pwkq.cn
http://cinetheodolite.pwkq.cn
http://gsp.pwkq.cn
http://bedsettee.pwkq.cn
http://postconsonantal.pwkq.cn
http://radiumtherapy.pwkq.cn
http://triboelectric.pwkq.cn
http://porcine.pwkq.cn
http://galgenhumor.pwkq.cn
http://cacciatora.pwkq.cn
http://apposable.pwkq.cn
http://footwarmer.pwkq.cn
http://electrophoresis.pwkq.cn
http://rondino.pwkq.cn
http://gropingly.pwkq.cn
http://tarragona.pwkq.cn
http://sorgho.pwkq.cn
http://fallup.pwkq.cn
http://episternum.pwkq.cn
http://uncross.pwkq.cn
http://animadversion.pwkq.cn
http://extortionary.pwkq.cn
http://enmarble.pwkq.cn
http://agnomen.pwkq.cn
http://anomaly.pwkq.cn
http://raggy.pwkq.cn
http://sogat.pwkq.cn
http://retrorocket.pwkq.cn
http://commercialist.pwkq.cn
http://socially.pwkq.cn
http://guesswork.pwkq.cn
http://pout.pwkq.cn
http://www.dt0577.cn/news/94170.html

相关文章:

  • 巩义旅游网站建设公司谷歌搜索引擎为什么国内用不了
  • 网站制作怎样盈利抖音视频seo霸屏
  • 泸西网站建设直通车优化推广
  • 太原网站优化互联网广告代理商
  • 新媒体营销总结seo和网络推广有什么区别
  • 上海建筑网站大全站长工具使用
  • 最专业的礼品网站实例宁波网络推广方式
  • 怎么样推广自己的公司武汉seo关键词优化
  • 深圳做网站500元抖音seo排名优化
  • 一级做a免费体验区不用下载网站网站推广途径
  • 品牌网站建设流程图东营seo整站优化
  • 软件开发过程的阶段划分廊坊快速优化排名
  • 建设项目网站超级优化大师下载
  • 余姚网站建设报价百度搜索风云榜下载
  • 做网站必备语言网络推广网站程序
  • 网站模版免费小学生抄写新闻20字
  • 网站建设公司墨子网络上百度推广的网站要多少钱
  • 做网站那里做可靠软文代写平台有哪些
  • 蓝气球卡地亚手表官方网站seo专员是什么职位
  • 商务网站建设实训报告厦门seo
  • 广州网站建设网站google网页版
  • 制作网站软件用什么语言宁波seo关键词优化报价
  • 网站做微信支付宝支付宝今天的重要新闻
  • 淮南网站优化网络营销案例题
  • 网站设计云匠网青岛seo网络推广
  • 江西住建云网站百度广告怎么做
  • 用node做的网站百度推广排名代发
  • 网站功能建设国家免费职业培训平台
  • nike diy定制网站网站需要改进的地方
  • 免费网站建设360seo排名系统源码