国内顶级 AI 的回答令人“贻笑大方”:看来苹果秃头码农们暂时还不会失业吧?

news2024/12/25 23:44:34

在这里插入图片描述

概览

在苹果 App 的日常开发中,利用 Xcode 预览可以帮我们极大的提高界面调试的效率。而且,若能进一步判断出当前 App 是否运行在 Preview 环境中则会更让秃头码农们“笑逐颜开”。
在这里插入图片描述

那么到底有没有简单的方法来完成这一任务呢?答案是肯定的!

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

  • 概览
  • 1. 从 AI 回答引发的“惨案”聊起
  • 2. 检查是否在 Preview 中运行的正确方法
  • 3. 侠肝义胆:SwiftUI 6.0 的 @Entry 宏前来助战!
  • 总结

相信学完本篇后,小伙伴们一定会惊叹:原来利用 SwiftUI 6.0(iOS 18)中的 @Entry 宏,识别 App 当前是否在预览中运行是如此的干脆利落、手到擒来!

那还等什么呢?让我马上开始 Preview 之旅吧!

Let’s go!!!😉


1. 从 AI 回答引发的“惨案”聊起

最近,我恰好需要回顾一下判断当前应用是否在 Xcode 预览中运行的方法,其实对于这个问题的答案很久之前我就已然知晓了。

不过,我还是决定让目前很火的 AI 来回答一下它:

在这里插入图片描述

虽然我手误将 SwiftUI写成了 SwiftData,但“机智的” AI 仍然秒懂了我的真正意图而且给出了貌似“精彩”解答:

在SwiftUI中,可以通过@Environment(.isPreview)来判断应用是否在预览中运行。以下是一个简单的示例代码:

import SwiftUI

struct ContentView: View {
    @Environment(\.isPreview) var isPreview

    var body: some View {
        Text(isPreview ? "在预览中" : "不在预览中")
    }
}

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}

人工智能最后还“信誓旦旦”的总结到:

在这个例子中,ContentView会根据它是否在预览中运行来显示不同的文本。@Environment(.isPreview)会注入一个布尔值,指示当前的视图是否在Xcode预览canvas中展示。

在苹果开发新手看来,这不得不说是一个“简洁而漂亮,飘逸又潇洒”的解答。

我不知道这个号称“全球领先”的 AI 是从何处得来的这个答案,可惜的是,实际上这个答案纯属“胡说九道”,无稽之谈!

因为在 SwiftUI 内置的 Environment 变量中根本没有 isPreview 这个所谓的值!

2. 检查是否在 Preview 中运行的正确方法

检查应用当前是否在 Xcode 预览中运行很简单,只需一个仅包含一行代码的计算属性即可:

extension ProcessInfo {
    public var isRunningInPreviews: Bool {
        environment["XCODE_RUNNING_FOR_PREVIEWS"] == "1"
    }
}

我们可以这么使用 isRunningInPreviews 属性:

extension ModelContainer {
    
    private static let schema = Schema([
        //...
    ])
    
    static var shared: ModelContainer = {
        
        let modelConfiguration = ModelConfiguration(schema: schema, isStoredInMemoryOnly: false)

        return try! ModelContainer(for: schema, configurations: [modelConfiguration])
    }()

    static var preview: ModelContainer = {
        
        let modelConfiguration = ModelConfiguration(schema: schema, isStoredInMemoryOnly: true)

        return try! ModelContainer(for: schema, configurations: [modelConfiguration])
    }()

    static var used: ModelContainer = {
        ProcessInfo.processInfo.isRunningInPreviews ? .preview : .shared
    }()
}

如上代码所示:只要直接使用 ModelContainer.used 模型容器实例对象,我们即可以满足 App 在正常和预览环境中两种不同使用场景的需求。

3. 侠肝义胆:SwiftUI 6.0 的 @Entry 宏前来助战!

虽然我们已经完全解决了博文开头那个问题,但是到这里还不算完。

利用 SwiftUI 6.0 中新加入的 @Entry 宏,我们可以“将错就错”:让之前 AI 那个“似是而非”的答案“逆天改命”成为“天选之子”。


关于 WWDC 24 中 @Entry 宏进一步相关的介绍,请小伙伴们移步如下链接观赏精彩内容:

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

首先,在 EnvironmentValues 中用 @Entry 宏添加一个 isPreviewing 值:

extension EnvironmentValues {
    @Entry var isPreviewing = ProcessInfo.processInfo.isRunningInPreviews
}

接着,我们可以在任意 SwiftUI 视图中使用 isPreviewing 环境变量啦:

struct ContentView: View {
    
    @Environment(\.isPreviewing) var isPreviewing
    
    var body: some View {
        NavigationStack {
            Text("是否在预览中运行:\(isPreviewing ? "是" : "否")")
        }
    }
}

现在,不同运行环境中的 App 便可以非常轻松方便的判断出当前是否在 Xcode 预览中运行啦!棒棒哒!💯

在这里插入图片描述
在这里插入图片描述

总结

在本篇博文中,我们先是了解到国内某个顶级 AI 对于苹果 SwiftUI 开发中的简单问题,竟然给出一个“啼笑皆非”的答案。随后,我们用 SwiftUI 6.0(iOS 18)中全新的 @Entry 宏让问题真正的迎刃而解。

感谢观赏,再会啦!😎

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1988102.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

苹果数据恢复攻略:3大秘籍,助你重建“数据高塔”

在数字时代,苹果设备如iPhone、iPad和Mac已成为我们生活中不可或缺的一部分,存储着大量珍贵的照片、视频、文件和联系信息。然而,意外的删除、系统更新或硬件故障等问题时常威胁着数据的安全。当数据“高塔”崩塌时,苹果数据恢复要…

海量数据处理商用短链接生成器平台 - 6

第十二章 海量数据下的分库分表技术栈讲解 第1集 大话业界常见数据库分库分表中间件介绍 简介: 大话业界常见分库分表中间件介绍 业界常见分库分表中间件 Cobar(已经被淘汰没使用了)TDDL 淘宝根据自己的业务特点开发了 TDDL (T…

基于JSP的智能仓储系统

你好,我是专注于智能系统开发的码农小野。如果对智能仓储系统感兴趣,欢迎私信交流。 开发语言 Java 数据库 MySQL 技术 JSP技术 工具 MyEclipse、Tomcat 系统展示 首页 [插入论文中的系统首页图片] 管理员功能界面 员工功能界面 供应商功能界…

MATLAB代码下载|蚁群算法|计算一元函数最小值

程序总述 程序使用蚁群优化的方法,计算一元函数(单输入单输出非线性函数)在定义域内的最小值。 函数形式 待计算最小值的函数形式如下: x 4 − 0.2 ∗ c o s ( 3 x ∗ π ) 0.6 x^4 - 0.2 * cos(3x * \pi) 0.6 x4−0.2∗cos…

AI新应用:概要设计与详细设计自动生成解决方案

近日,CoCode旗下的Co-Project智能项目管理平台V4.0.0升级发布,新增AI生成概要设计和AI生成详细设计功能,大大提高了设计的效率和质量。 CoCode旗下的Co-Project智能项目管理平台 一键智绘蓝图自现 平台设计板块新增概要设计功能,…

有点恶心,但是一周可以拿5个大模型岗offer,非常详细收藏我这一篇就够了

一、基础篇目前主流的开源模型体系有哪些? Transformer体系:由Google提出的Transformer模型及其变体,如BERT、GPT等。 PyTorch Lightning:一个基于PyTorch的轻量级深度学习框架,用于快速原型设计和实验。TensorFlow Mo…

同声传译翻译器哪个好?评测5款实用的同声传译翻译器

想象一下,在国际会议中,演讲者的声音刚落,耳机里便响起清晰的母语翻译;或是观看一部外语电影,无需眼睛离开屏幕,字幕就自动以你熟悉的语言呈现——这不再是科幻电影里的桥段,而是现实生活中同声…

猫头虎分享:CSDN博客最多可以创建多少个专栏?

🐯 猫头虎分享:CSDN博客最多可以创建多少个专栏? 摘要 📋 在CSDN博客平台上,不同级别的用户可以创建的专栏数量有所不同。本文将详细介绍CSDN博客创建专栏的具体数量限制,并且对不同等级用户所能创建的专…

武汉流星汇聚:亚马逊赋能中国卖家,全球市场份额优势引领出海潮流

在全球电商的浩瀚星空中,亚马逊无疑是最耀眼的星辰之一,其卓越的市场占有率不仅巩固了自身在全球电商市场的领导地位,更为中国卖家出海提供了前所未有的机遇与优势。随着中国卖家对海外市场的探索日益深入,亚马逊平台以其独特的优…

最新Thinphp开发的证书查询系统源码/开源版/支持自适应多端PC+手机站+含安装教程

源码简介: 最新Thinphp开发的证书查询系统源码,它是开源版,别小看这个开源版,它可是能自动适应各种屏幕大小,不管是用手机还是电脑,都能轻松查证书。附上了安装教程。 这款精心开发用PHP打造的证书查询系…

vue学习--02天

一、数据绑定 !DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title><script src&q…

React 知识点(二)

文章目录 一、React 组件二、React 组件通信 - 父子通信三、React 组件通信 - 子父通信四、React 组件通信 - 兄弟通信五、React 组件通信 - 跨组件通信(祖先)六、结合组件通信案例七、props-children 属性八、props-类型校验九、React 生命周期十、setState 扩展 一、React 组…

https证书怎么申请?

申请SSL证书的步骤可以因不同的证书颁发机构&#xff08;CA&#xff09;和证书类型&#xff08;如DV SSL、OV SSL、EV SSL&#xff09;而有所差异。以下是一个通用的SSL证书申请流程&#xff0c;以供参考&#xff1a; 1. 选择SSL证书类型 首先&#xff0c;需要根据您的需求选…

SQLE:你的SQL全生命周期质量管理平台

SQLE&#xff1a;你的SQL全生命周期质量管理平台 在数据库管理领域&#xff0c;总有那么几个难题让人头疼。今天要介绍的SQLE&#xff0c;就是解决这些问题的利器。它不仅支持多种数据库&#xff0c;还能在事前控制、事后监督、标准发布等场景中大显身手。本文将为你详细介绍SQ…

【学习方法】高效学习因素 ② ( 学习动机 | 内在学习动机 | 外在学习动机 | 外在学习动机的调整方向 | 保护学习兴趣 | 高考竞争分析 )

文章目录 一、高效学习的其它因素 - 学习动机1、学习动机2、内在学习动机3、外在学习动机4、外在学习动机的问题所在5、外在学习动机的调整方向6、保护学习兴趣7、高考竞争分析 上一篇博客 【学习方法】高效学习因素 ① ( 开始学习 | 高效学习因素五大因素 | 高效学习公式 - 学…

二十八、【人工智能】【机器学习】- 隐马尔可夫模型 (Hidden Markov Models, HMMs)

系列文章目录 第一章 【机器学习】初识机器学习 第二章 【机器学习】【监督学习】- 逻辑回归算法 (Logistic Regression) 第三章 【机器学习】【监督学习】- 支持向量机 (SVM) 第四章【机器学习】【监督学习】- K-近邻算法 (K-NN) 第五章【机器学习】【监督学习】- 决策树…

SQL时间盲注

目录 1.时间盲注 2使用场景 3.步骤 3.1判断注入点 3.2爆数据库名 3.3爆表名 3.4爆字段名 3.5查询数据 1.时间盲注 时间盲注是指基于时间的盲注&#xff0c;也叫延时注入&#xff0c;根据页面的响应时间来判断是否存在注入。 2使用场景 页面没有回显位置&#xff08;…

Lumina-mGPT图像生成;清华大学研发的首个开源预训练文本生成视频模型;Medical SAM 2实现2D和3D医学图像分割

✨ 1: Lumina-mGPT Lumina-mGPT是一种多模态自回归模型&#xff0c;尤其擅长将文本描述生成灵活逼真的图像。 Lumina-mGPT是一系列多模态自回归模型&#xff0c;能够处理多种视觉和语言任务&#xff0c;其中尤为擅长从文本描述中生成灵活的真实感图像。该模型家族由Alpha-VLL…

【EtherCAT】Windows+Visual Studio配置SOEM主站——静态库配置+部署

目录 一、准备工作 1. Visual Studio 2022 2. Npcap 1.79 3. SOEM源码 二、静态库配置 1. 修改SOEM源码配置 2. 编译SOEM源码 3. 测试 三、静态库部署 1. 新建Visual Studio工程 2. 创建文件夹 3. 创建主函数 4. 复制静态库 5. 复制头文件 6. 配置头文件…

[Java]栈--Stack

前言 熟悉Class Stack. 栈 关于栈—笔者的C语言描述 java.util包有Stack集合类. JDK17的Stack源码非常简单,能相对轻易看懂. 我们能用Stack类来充当栈,Java框架中LinkedList(双向链表)实现了双端队列(Deque),也能当作栈使用. Stack类是基于数组实现. public Stack<E>…