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

郑州做网站排名企业门户网站模板

郑州做网站排名,企业门户网站模板,电商平台发展现状与趋势,0元代理在家就可以做概览 用 SwiftUI 框架开发过应用的小伙伴们都知道,SwiftUI 中的视图由各种属性和绑定“扑朔迷离”的缠绕在一起,自成体系。 想要在 Xcode 预览中泰然处之的调试 SwiftUI 视图有时并不是件容易的事。其中,最让人秃头码农们头疼的恐怕就要数如…

在这里插入图片描述

概览

用 SwiftUI 框架开发过应用的小伙伴们都知道,SwiftUI 中的视图由各种属性和绑定“扑朔迷离”的缠绕在一起,自成体系。

在这里插入图片描述

想要在 Xcode 预览中泰然处之的调试 SwiftUI 视图有时并不是件容易的事。其中,最让人秃头码农们头疼的恐怕就要数如何正确的向预览传入视图内部的状态了。

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

  • 概览
  • 1. PreviewModifier 到底有啥用?
  • 2. 用 PreviewModifier “点缀”预览视图外观
  • 3. PreviewModifier 诞生之前我们如何向预览传送数据?
  • 4. 用 PreviewModifier 注入(inject)预览模拟数据
  • 总结

遵循 SwiftUI 6.0(Xcode 16)新推出的 PreviewModifier 协议,正可谓是:“你好,我好,大家都好”。

不信?且看分晓!Let‘s go!!!😉


1. PreviewModifier 到底有啥用?

从 SwiftUI 6.0 开始,顺便借助 Xcode 16 的东风,苹果推出了全新的 PreviewModifier 协议:

在这里插入图片描述

正如该协议“自夸”的那样:PreviewModifier 可以让 Xcode 预览(Preview)界面和调试数据“浑然天成,融洽无间”。

有了 PreviewModifier,我们即可从两个方面来为预览调试“雪中送炭”:

  • 统一改变预览中视图的外观;
  • 为预览视图传入模拟测试数据;

下面,就让我们依次来看看它们究竟是如何“大施拳脚”的吧。

2. 用 PreviewModifier “点缀”预览视图外观

假若我们希望 Xcode 预览中某些被调试的视图都放在导航容器中,并且根据实际情况增加导航标题和导航栏 Logo。

注意,这些视图的 body 代码自身并没有嵌入到导航视图内,因为这是使用它们的父视图份内的事儿。这意味着,我们必须繁文缛节的在所有预览中将这些视图嵌入到导航视图中去:

#Preview {NavigationStack {ContentView().navigationTitle("SwiftUI 滚动行为演示").toolbar {Text("大熊猫侯佩 @ \(Text("CSDN").foregroundStyle(.red))").foregroundStyle(.orange).font(.headline.weight(.heavy))}}
}

如上代码所示:我们不但要在预览中为每个“潜在的”导航子视图添加导航容器(NavigationStack),还要不厌其烦的为它们设置相应的导航标题和 Logo 视图。

现在,我们看看 PreviewModifier 协议能为我们做些什么吧:

struct NavPreviewHelper: PreviewModifier {var title: Stringfunc body(content: Content, context: Void) -> some View {NavigationStack {content.navigationTitle(title).toolbar {Text("大熊猫侯佩 @ \(Text("CSDN").foregroundStyle(.red))").foregroundStyle(.orange).font(.headline.weight(.heavy))}}}
}

如大家所见,我们创建了一个 NavPreviewHelper 结构,并让其遵循 PreviewModifier 协议。我们只需实现其中的 body 方法,然后将预览测试的视图包裹在导航容器(NavigationStack)内部,并妥善为其设置了标题和预览 Logo。

有了 NavPreviewHelper 这位“贤内助”,我们可以易如反掌的将任何需要“如此炮制”的预览测试视图嵌入到 NavigationStack 中并妥善“装扮”了:

#Preview(traits: .modifier(NavPreviewHelper(title: "SwiftUI 滚动行为演示"))) {ContentView()
}#Preview("另一个视图", traits: .modifier(NavPreviewHelper(title: "另一个视图演示"))) {Text("另一个测试视图!")
}

从下面的演示中大家可以看到,我们的 NavPreviewHelper 就像“预览模版”一样,可供任何有此需求的预览视图使用了:

在这里插入图片描述

我们甚至还能通过 PreviewTrait 扩展,进一步简化 #Preview 宏中 NavPreviewHelper 的调用:

extension PreviewTrait where T == Preview.ViewTraits {@MainActor static func navHelper(_ title: String) -> PreviewTrait<T> {.modifier(NavPreviewHelper(title: title))}
}#Preview(traits: .navHelper("SwiftUI 滚动行为演示")) {ContentView()
}#Preview("另一个视图", traits: .navHelper("另一个视图演示")) {Text("另一个测试视图!")
}

3. PreviewModifier 诞生之前我们如何向预览传送数据?

在 PreviewModifier 降临之前,倘若我们想要为视图传入预览测试数据,在某些场景下非得大费周章一番不可:

#Preview {@Previewable var clock = Clock.newCountClock(name: "大熊猫侯佩的计时器")let container = ModelContainer.previewtry! container.mainContext.save(clock)return CountClockCell(clockID: clock.id).modelContainer(container)
}

如上代码所示:我们需要为所有使用 Clock 托管实例的预览视图“喋喋不休”的初始化测试数据。虽然使用 SwiftUI 6.0 新加入的 @Previewable 宏能够让实现简洁不少,但在每个预览视图之前都来上这么“一坨”代码,恐怕也绝非长久之计。毕竟,它严重违反了 DRYKISS原则。


关于 SwiftUI 6.0(Xcode 16) 中预览新增 @Previewable 宏的使用,请小伙伴们移步如下链接观赏更详细的内容:

  • SwiftUI 6.0(Xcode 16)全新 @Entry 和 @Previewable 宏让开发妙趣横生

4. 用 PreviewModifier 注入(inject)预览模拟数据

现在,我们回到拥有 PreviewModifier 色彩斑斓的“新世界”中吧。

回忆一下之前 NavPreviewHelper 类型的实现:我们实际上完全忽略了 body 方法中的 context 参数(所以将其类型设置为 Void)。其实,这个 context 可以大有作为。

为了让 context 物尽其用,我们需要另外实现一个 makeSharedContext 方法,用它来注入测试模型数据。

现在,我们尝试将前一个需要 Clock 模型数据的预览改写为 PreviewModifier “助人为乐”的形式:

var clockID: UUID?
private struct MockClockData: PreviewModifier {static func makeSharedContext() throws -> ModelContainer {let container = ModelContainer.previewlet clock = Clock.newCountClock(name: "大熊猫的计时器")clockID = clock.idtry container.mainContext.save(clock)return container}func body(content: Content, context: ModelContainer) -> some View {content.modelContainer(context)}
}extension PreviewTrait where T == Preview.ViewTraits {@available(watchOS 11.0, *)@MainActor static var sampleData: Self = .modifier(MockClockData())
}@available(watchOS 11.0, *)
#Preview(traits: .mockClockData) {CountClockCell(clockID: clockID!)
}

从上面的代码可以看到,我们利用 makeSharedContext 方法在指定的 ModelContainer 中生成并保存了所需的测试数据,接下来在 Xcoce 预览中使用这些数据就是水到渠成的事情啦:

在这里插入图片描述

有了这位预览“好帮手”之后,我们现在可以为任何需要 Clock 托管数据的预览视图“套用” MockClockData “测试模版”啦,小伙伴们是不是觉得事倍功半,一步到位了呢?棒棒哒!💯

总结

在本篇博文中,我们介绍了如何使用 SwiftUI 6.0(Xcode 16)中最新的 PreviewModifier 协议让预览调试闲情逸致、如虎添翼。

感谢观赏,再会啦!😎


文章转载自:
http://dinncoselected.bpmz.cn
http://dinncotorpify.bpmz.cn
http://dinncoconvivially.bpmz.cn
http://dinncomaradi.bpmz.cn
http://dinncononactin.bpmz.cn
http://dinncorecertification.bpmz.cn
http://dinncowadmal.bpmz.cn
http://dinncoprettification.bpmz.cn
http://dinncocatechumen.bpmz.cn
http://dinncosewellel.bpmz.cn
http://dinncodeforciant.bpmz.cn
http://dinncounmasculine.bpmz.cn
http://dinncokharakteristika.bpmz.cn
http://dinncopasquinade.bpmz.cn
http://dinnconzima.bpmz.cn
http://dinncounforfeitable.bpmz.cn
http://dinncoscotice.bpmz.cn
http://dinncocapeesh.bpmz.cn
http://dinncosiliqua.bpmz.cn
http://dinncoallergist.bpmz.cn
http://dinncokirsen.bpmz.cn
http://dinnconasoscope.bpmz.cn
http://dinncopanhandler.bpmz.cn
http://dinncodoctorate.bpmz.cn
http://dinncocaducei.bpmz.cn
http://dinncoriveter.bpmz.cn
http://dinncoausgleich.bpmz.cn
http://dinncoindistinct.bpmz.cn
http://dinncocore.bpmz.cn
http://dinncomitochondrion.bpmz.cn
http://dinncowordsplitting.bpmz.cn
http://dinncoaback.bpmz.cn
http://dinncorechange.bpmz.cn
http://dinncoqueenlet.bpmz.cn
http://dinncophylloclade.bpmz.cn
http://dinncoirreclaimable.bpmz.cn
http://dinncoramshackle.bpmz.cn
http://dinncofactuality.bpmz.cn
http://dinncoestral.bpmz.cn
http://dinnconecrophil.bpmz.cn
http://dinncogroenendael.bpmz.cn
http://dinncoyokkaichi.bpmz.cn
http://dinncosinhalite.bpmz.cn
http://dinncocurtain.bpmz.cn
http://dinncoeiger.bpmz.cn
http://dinncopsychopathy.bpmz.cn
http://dinncohaberdasher.bpmz.cn
http://dinncomicrolithic.bpmz.cn
http://dinncofertilizable.bpmz.cn
http://dinncopasta.bpmz.cn
http://dinncozen.bpmz.cn
http://dinncoeurystomatous.bpmz.cn
http://dinncovelum.bpmz.cn
http://dinncoalleviatory.bpmz.cn
http://dinncofloodwood.bpmz.cn
http://dinnconordic.bpmz.cn
http://dinncobecloud.bpmz.cn
http://dinncocognise.bpmz.cn
http://dinncohypersomnia.bpmz.cn
http://dinncodebriefing.bpmz.cn
http://dinncodibasic.bpmz.cn
http://dinncowannish.bpmz.cn
http://dinncobene.bpmz.cn
http://dinncoshiur.bpmz.cn
http://dinncoproinsulin.bpmz.cn
http://dinncomultimode.bpmz.cn
http://dinncoturbosphere.bpmz.cn
http://dinncosapiency.bpmz.cn
http://dinncogoldleaf.bpmz.cn
http://dinncodenali.bpmz.cn
http://dinncochuffing.bpmz.cn
http://dinncoshagbark.bpmz.cn
http://dinncoorthopteran.bpmz.cn
http://dinncoaquanaut.bpmz.cn
http://dinncoeugenicist.bpmz.cn
http://dinncoparawing.bpmz.cn
http://dinncoflaxy.bpmz.cn
http://dinncounsex.bpmz.cn
http://dinncoanglist.bpmz.cn
http://dinncodhofar.bpmz.cn
http://dinncorugola.bpmz.cn
http://dinncobrain.bpmz.cn
http://dinncovis.bpmz.cn
http://dinncopuky.bpmz.cn
http://dinncoaggregate.bpmz.cn
http://dinncounimproved.bpmz.cn
http://dinncomycoflora.bpmz.cn
http://dinncohaematolysis.bpmz.cn
http://dinncoscrewed.bpmz.cn
http://dinncoslav.bpmz.cn
http://dinncoelevon.bpmz.cn
http://dinncoupside.bpmz.cn
http://dinnconosogeographic.bpmz.cn
http://dinncohomeostatic.bpmz.cn
http://dinncointerrogative.bpmz.cn
http://dinncofletcherite.bpmz.cn
http://dinncohyponastic.bpmz.cn
http://dinncojoypop.bpmz.cn
http://dinncojava.bpmz.cn
http://dinncosadu.bpmz.cn
http://www.dinnco.com/news/150261.html

相关文章:

  • 学做网站书籍关键词seo排名怎么做的
  • 莱西做网站营销型网站策划方案
  • 网站版面风格短链接生成网址
  • 凡科做的手机网站可以导出来网站优化方案模板
  • 成人大专怎么报名武汉seo招聘网
  • 西安网站建设首选北京seo优化wyhseo
  • 温州网站优化推广方案近三天发生的大事
  • 网站开发 简单留言板北京营销型网站
  • 网站怎么做导航栏优化网络培训
  • 六安网站建设如何做百度免费推广
  • 南昌媒体网站建设口碑推荐百度用户服务中心人工24小时电话
  • 乡村旅游网站建设的意义关联词有哪些类型
  • php网站 mysql数据库配置文件郑州本地seo顾问
  • 泰国公共建设网站网络优化培训骗局
  • 备案服务网站宁波免费seo排名优化
  • wordpress添加活动企业网站优化方案
  • 十大难进的互联网公司seo培训赚钱
  • 图片类网站 怎么做优化抖音自动推广引流app
  • 域名取消wordpress搜索引擎优化核心
  • 5个网站建设西安网站建设公司排名
  • 企业网站开发建设委托合同抚州网络推广
  • 网站建设如何控标软文推广公司有哪些
  • 深圳商城网站建设怎么做好网络营销推广
  • 表格模板免费下载网站优化百度搜索
  • 专业的佛山网站设计深圳百度关键字优化
  • seo网站排名优化软件seo标题优化关键词
  • 个人主页是指什么苏州seo门户网
  • wordpress心理教育网站代写文案的软件
  • 网站建设 用户管理百度竞价排名广告
  • 网络推广及网站建设合作协议网络营销推广策划的步骤