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

『第三章』雨燕栖息地:Swift 开发环境

在这里插入图片描述

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

  • 1. Swift 开发平台
  • 2. Swift 集成开发环境 Xcode?
  • 3. 原型试验场:Playground
  • 4. 另一种尝试:iPad 上的 Swift Playgrounds
  • 5. Swift 交互实验室:Swift REPL
  • 总结

咫尺春三月,寻常百姓家。为迎新燕入,不下旧帘遮。
翅湿沾微雨,泥香带落花。巢成雏长大,相伴过年华。

1. Swift 开发平台

虽然目前在 Linux 和 Windows 上也可适当的小撸几发 Swift 代码,但要想正经八百的学习 Swift 语言,macOS 还是舍我其谁般的最佳选择。

在这里插入图片描述

对于  来说,未来向 silicon 芯片全线迈进绝对是大势所趋,但选择 intel 或是 apple silicon 芯片(M1,M2)的 Mac 作为学习开发主机其实都无所谓。可能某些 iOS/iPadOS 模拟器新特性的测试在 M1 芯片上兼容性更好,毕竟 A系列处理器和 M2 从血缘上说更近一些。

在这里插入图片描述

也可能某些第三方库在 M1 芯片上编译时会存在兼容问题,但随着时间的推移这些都不是事儿。

在这里插入图片描述

现在  官方商城全线上架的都是 silicon 芯片 的 Mac,随着  silicon 芯片 Mac 上软件生态的日趋成熟,绝大多数第三方 App 都能原生执行并充分利用 ARM64 架构的威力以达到最佳性能。

如果小伙伴们选择的是 intel 架构的 Mac,那么机型不要太老:2018 年以后的为佳。

当然,在 iPad 上也可学习 Swift 编程,我们会在本文后面做进一步介绍。

2. Swift 集成开发环境 Xcode?

在 Mac 上做过开发的小伙伴不会不知道 Xcode 这款开发工具,它类似于 Windows 上的 Microsoft Visual Studio(简称VS)。
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

Xcode 不仅仅是一款 IDE ,它包含了 App 一整套从零开始到上架完整流程的工具集,包括但不限于:

  • 代码、界面和资源编辑器
  • SpriteKit、SceneKit 场景编辑器
  • 数据库(CoreData)管理器
  • 强大的调试环境(LLDB)
  • 应用 UI 探查和调试器
  • 完善的单元测试(Unit Test)环境
  • 开发证书管理
  • 源代码控制(git)工具
  • 国际化资源管理器
  • Playground
  • 性能监控剖析器:Instruments
  • App 归档、打包以及上传工具
  • 模拟器管理
  • Xcode Cloud 实现持续集成和交付
  • 完整的开发文档

在这里插入图片描述

我们可以从 Mac 上的 App Store 直接安装 Xcode,不过更推荐的做法是从  开发官网(https://developer.apple.com/)下载安装:

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

为了精简 Xcode 的体积,从 14.0 开始,苹果将模拟器平台(iOS/iPadOS、WatchOS、tvOS、visionOS等)从 Xcode 中剥离出来,所以下载安装 Xcode 之后,我们还需要单独从  开发网站下载和安装所需的模拟器。

在这里插入图片描述

或者,我们也可以进入 Xcode 中完成模拟器的下载和安装:

在这里插入图片描述

在本专栏博文中,所有测试主要都在 iOS 模拟器上运行,所以我们只需额外下载它即可。

Xcode 可以创建很多类型的开发项目,在本系列博文中我们只会用到其中两种:iOS App 和 Playground。
在这里插入图片描述

我们会在后续博文对这两种项目类型做进一步的介绍。

在 Mac 上 Swift 的入门学习中,我们更推荐 Xcode 这种集成开发环境,而不是简单的代码编辑器。


更多 Xcode 使用的小技巧,请小伙伴们移步如下链接观赏:

  • Xcode 超简单实用小秘技让撸码进入新境界
  • Xcode 14之大变化详细介绍

3. 原型试验场:Playground

之前说过,Xcode 中包含 Playground 类型的项目,它特别适用于验证小段代码或原型的开发。

如下所示,我们可以在 Xcode 的全局菜单中依次选择 File -> New -> Playground… 新建一个 Playground 项目:

在这里插入图片描述

类似于其它语言的交互式解释器(比如 ruby 的 irb 或 pry),我们可以随着感觉和心灵真实想法非常直接与纯粹的随性撸码:

在这里插入图片描述

我们后续章节中若不做特殊说明,大部分实验代码在 Playground 中运行。

不得不承认,虽然 Playground 非常方便,但它还是有缺陷的:

  • 启动速度慢
  • 不稳定、时常崩溃、挂起
  • 无法直接使用外部库
  • 无法下断点

关于 Playground 使用的更详细介绍,请小伙伴们移步其它相关博文中观赏:

  • Xcode中Playground运行代码无响应的极简解决方法
  • 吐槽一下Xcode中的Playground
  • Xcode:Playground中延时调用的新写法
  • Playground中格式注释语法
  • Swift3的playground中对UI直接测试支持的改变
  • Xcode的playground中对于SpriteKit物理对象的更新为何无效
  • Xcode在playground的quick look框中显示对象自定义视图

4. 另一种尝试:iPad 上的 Swift Playgrounds

如果小伙伴们手头没有 Mac,那么在 iPad 上还有另一种 Playgrounds 可供选择。注意它和 Xcode 中的 Playground 类似但不完全一样。

iPad 上的 Playgrounds 是一款单独的 App,可以在 AppStroe 中下载,在 Mac 的应用商店中也有对应的 Mac 版本:

在这里插入图片描述

从 2022 年开始,苹果对 iPad 上的 Playgrounds 做了重大升级,它创建的项目可以存储在 Cloud 中,并可以随时同步到 Mac 上继续进行开发。而且,通过 Playgrounds 可以将编写好的项目直接上传到应用商店中,彻底抛开 Xcode 的桎梏。

iPad(或 Mac) 上的 Playgrounds 在某些情况下可以代替 Xcode 中 Playground 使用,因为前者更加稳定,更具互动性;而且其中包含海量 Swift 编程教学项目,可以进一步激发初学者的兴趣。

在这里插入图片描述

如果决定在 iPad 上开发,有条件可以搭配蓝牙键盘和鼠标,这样撸码更加自然。

关于更多 Playgrounds 的介绍,请小伙伴们移步如下链接中进一步观赏:

  • WWDC 2022:iPad上开发App不再是梦?新版Playgrounds来袭!

5. Swift 交互实验室:Swift REPL

除了以上几种选择,我们还可以通过 Swift REPL(交互解释器)来更“轻便”的学习 Swift 开发。

在这里插入图片描述

在 Mac 中打开终端,敲入如下命令:

swift repl

进入交互时编译环境后,我们可以创建和使用变量、类与结构、函数、闭包等元素,还可以导入其它库和框架以实验我们任何极具创意的头脑风暴:

在这里插入图片描述

总结

在本篇博文中,我们介绍了 Mac 上的主力开发工具 Xcode,并讨论了学习 Swift 语言的几种方式和平台:Xcode iOS App 项目、Xcode Playground,iPad(Mac)Swift Playgrounds 以及 Swift REPL 交互环境。

在后续的学习中,我们可以任选一种方式来验证示例代码,推荐大家亲自动手尝试来感受一下这些学习工具的魅力。

在后三篇博文中,我们将进入“正题”来介绍 Swift 基本语法和类型,到时见喽!😉

相关文章:

『第三章』雨燕栖息地:Swift 开发环境

在本篇博文中,您将学到如下内容: 1. Swift 开发平台2. Swift 集成开发环境 Xcode?3. 原型试验场:Playground4. 另一种尝试:iPad 上的 Swift Playgrounds5. Swift 交互实验室:Swift REPL总结 咫尺春三月,寻常百姓家。为…...

elasticsearch-5.6.15集群部署,如何部署x-pack并添加安全认证

目录 一、环境 1、JDK、映射、域名、三墙 2、三台服务器创建用户、并为用户授权 二、配置elasticsearch-5.6.15实例 1、官网获取elasticsearch-5.6.15.tar.gz,拉取到三台服务器 2、elas环境准备 3、修改elasticsearch.yml配置 4、修改软、硬件线程数 5、修改…...

C++ list 模拟实现

目录 1. 基本结构的实现 2. list() 3. void push_back(const T& val) 4. 非 const 迭代器 4.1 基本结构 4.2 构造函数 4.3 T& operator*() 4.4 __list_iterator& operator() 4.5 bool operator!(const __list_iterator& it) 4.6 T* operator->…...

Elasticsearch:使用 Open AI 和 Langchain 的 RAG - Retrieval Augmented Generation (三)

这是继之前文章: Elasticsearch:使用 Open AI 和 Langchain 的 RAG - Retrieval Augmented Generation (一) Elasticsearch:使用 Open AI 和 Langchain 的 RAG - Retrieval Augmented Generation (二&…...

主流电商平台价格如何高频监测

双十一来临在即,除了商家很兴奋,品牌和消费者同样持续关注,除了关注不同平台的产品上架情况,价格也是这些渠道参与者最为关注的,品牌需要通过掌握各店铺的价格情况,了解市场情况以及各经销商的渠道治理现状…...

Spring关于注解的使用

目录 一、使用注解开发的前提 1.1 配置注解扫描路径 二、使用注解创建对象 2.1 Controller(控制器储存) 2.2 Service(服务储存) 2.3 Repository(仓库储存) 2.4 Component(组件储存) …...

图像处理入门 1(Introduction to image processing)

如何获得一张照片 (How to obtain a photo)? 每次看到一些光学设备的规格介绍的时候,一些专用名词,例如:等效焦距,曝光模式 等 让你一头雾水。爱学习的你一定十分好奇他们是什么意思。每次看到…...

中国大模型开源创新与合作的新篇章 | 2023 CCF中国开源大会

2023年10月21日至22日,由中国计算机学会(CCF)和开放原子开源基金会联合主办的CCF中国开源大会(CCF ChinaOSC)在湖南省长沙市北辰国际会议中心成功召开。此次大会以“开源联合,聚力共赢”为主题,…...

vue项目切换页面白屏的解决方案

问题描述 1、页面切换后白屏&#xff0c;同时切换回上一个页面同样白屏 2、刷新后正常显示 3、有警告&#xff1a;Component inside <Transition> renders non-element root node that cannot be animated 解决方法 <Transition>中的组件呈现不能动画化的非元素根…...

5G vs 4G

5G与4G的关键性能指标对比 指标名称流量密度连接密度空口时延移动性能效指标用户体验速率频谱效率峰值速率4G 参考值0.1 M b i t / s / m 2 Mbit/s/m^2 Mbit/s/m2 1 ∗ 1 0 5 / k m 2 1*10^5/km^2 1∗105/km210ms350km/h1倍10Mbit/s1倍1Gbit/s5G 参考值10 M b i t / s / m 2 M…...

【JavaEE重点知识归纳】第11节:认识异常

目录 一&#xff1a;异常的概念和体系结构 1.概念 2.体系结构 3.异常分类 二&#xff1a;异常的处理 1.防御式编程 2.异常的抛出 3.异常的捕获 4.异常的处理流程 三&#xff1a;自定义异常 一&#xff1a;异常的概念和体系结构 1.概念 &#xff08;1&#xff09;在…...

一键自助建站系统api版系统源码

自助建站系统,一建建站系统api版,自动建站 安装推荐php7.2或7.2以下都行 可使用虚拟主机或者服务器进行搭建。 分站进入网站后台 域名/admin 初始账号123456qq.com密码123456 找到后台的网站设置 将主站域名及你在主站的通信secretId和通信secretKey填进去。 即可正常使用 通信…...

全国三维数字化创新设计大赛湖北赛区省赛成功举办

须弥芥子&#xff0c;数字如海。10月14日—15日&#xff0c;2023 年数字科技文化节——第16届全国三维数字化创新设计大赛湖北赛区省赛暨产教联合体大会在武汉软件工程职业学院成功举行。 &#xff08;大赛全体专家领导合影&#xff09; 全国三维数字化创新设计大赛组委会副秘…...

OpenCV #以图搜图:均值哈希算法(Average Hash Algorithm)原理与实验

1. 介绍 均值哈希算法&#xff08;Average Hash Algorithm&#xff09; 是哈希算法的一种&#xff0c;主要用来做相似图片的搜索工作。 2. 原理 均值哈希算法&#xff08;aHash&#xff09;首先将原图像缩小成一个固定大小的像素图像&#xff0c;然后将图像转换为灰度图像&am…...

博通BCM575系列RDMA网卡驱动bnxt_re分析(一)

简介 整个BCM系列驱动分成以太网部分(bnxt_en.ko)和RDMA部分(bnxt_re.ko), 两个模块之间通过内核的auxiliary_bus进行管理.我们主要分析下bnxt_re驱动. 代码结构 这个驱动的核心是 qplib_fp.c, 这个文件主要包含了驱动的数据路径, 包括Post Send, Post Recv, Poll CQ流程的实…...

集合总结-

Collection 常用方法 package com.test01;import java.util.ArrayList; import java.util.Collection; /*添加元素---boolean add(E e);移除元素---boolean remove(Object c);判断元素是否存在---boolean contains(Object c);*/ public class S {public static void main(Str…...

【知识串联】概率论中的值和量(随机变量/数字特征/参数估计)【考研向】【按概率论学习章节总结】

就我的概率论学习经验来看&#xff0c;这两个概念极易混淆&#xff0c;并且极为重点&#xff0c;然而&#xff0c;在概率论的前几章学习中&#xff0c;如果只是计算&#xff0c;对这方面的辨析不清并没有问题。然而&#xff0c;到了后面的参数估计部分&#xff0c;却可能出现问…...

上游服务不可用了,下游服务如何应对?

上游服务不可用了&#xff0c;下游服务如何应对&#xff1f; 引言 在系统中&#xff0c;上游服务和下游服务是两个关键概念。上游服务通常指的是提供某种功能或数据的服务端&#xff0c;它接收来自下游服务的请求&#xff0c;并根据请求进行处理和响应。下游服务通常指的是发…...

WebGL笔记:矩阵的变换之平移的实现

矩阵的变换 变换 变换有三种状态&#xff1a;平移、旋转、缩放。当我们变换一个图形时&#xff0c;实际上就是在移动这个图形的所有顶点。解释 webgl 要绘图的话&#xff0c;它是先定顶点的&#xff0c;就比如说我要画个三角形&#xff0c;那它会先把这三角形的三个顶点定出来…...

XTU-OJ 1187-Candy

WCB某天买了非常多的糖果并把它们分成N份&#xff0c;依次分别有1&#xff0c;2&#xff0c;3…,N个糖果。他想拿出其中的3份分给他的室友&#xff0c; 为了不让室友们闹意见&#xff0c;必须让这三份的糖果总数恰好能被三人均分。请问他一共有多少种不同的组合方案数&#xff…...

基于 nodejs+vue城市轨道交通线路查询系统mysql

目 录 摘 要 I ABSTRACT II 目 录 II 第1章 绪论 1 1.1背景及意义 1 1.2 国内外研究概况 1 1.3 研究的内容 1 第2章 相关技术 3 2.1 nodejs简介 4 2.2 express框架介绍 6 2.4 MySQL数据库 4 第3章 系统分析 5 3.1 需求分析 5 3.2 系统可行性分析 5 3.2.1技术可行性&#xff1a;…...

电商时代,VR全景如何解决实体店难做没流量?

近日&#xff0c;电商和实体经济的对立成为了热门话题&#xff0c;尽管电商的兴起确实对线下实体店造成了一定的冲击&#xff0c;但实体店也不是没有办法挽救。VR全景助力线下实体店打造线上店铺&#xff0c;打通流量全域布局&#xff0c;还能实现打开产品、查看产品内部细节等…...

操作系统-浅谈CPU与内存

目录 计算机的基本组成CPU内存虚拟内存内存分段内存分页 CPU与内存的交互过程高速缓存cache 所有图片均来自&#xff1a;小林coding 计算机的基本组成 计算机由软件和硬件组成 硬件由CPU(中央处理器&#xff09;存储器(内存外存&#xff09;外部设备组成。 软件由应用软件和系…...

K8s 部署 CNI 网络组件+k8s 多master集群部署+负载均衡

------------------------------ 部署 CNI 网络组件 ------------------------------ ---------- 部署 flannel ---------- K8S 中 Pod 网络通信&#xff1a; ●Pod 内容器与容器之间的通信 在同一个 Pod 内的容器&#xff08;Pod 内的容器是不会跨宿主机的&#xff09;共享同一…...

若依微服务上传图片文件代理配置

在使用若依微服务文件上传时候,文件上传成功会上传到D:/ruoyi/uploadPath目录下。默认使用9300端口进行访问图片文件,现在我想把它代理到80端口应该怎么做呢? 配置前:http://localhost:9300/statics/2023/09/24/test.jpg 配置后:http://localhost/statics/2023/09/24/test…...

物联网与 Linux 的相爱相生

Linux 无疑将在物联网中扮演一个关键角色&#xff0c;但是其光彩将与其它的一些分享。 随着 Canonical 重新关注于赢利和新技术&#xff0c;我们中的一些人发现我们正在思考 Linux 未来将走向何方&#xff0c;IoT&#xff08;物联网&#xff09;是否是 Linux 的未来&#xff1…...

python自动化测试(一):操作浏览器

通过Python的代码去操作浏览器的操作 目录 目录 1、导入自动化模块 2、定义打开的浏览器驱动、声明一个url变量保存打开的地址 3、使用函数&#xff1a;driver.get(url)打开浏览器的指定页面 4、最大化浏览器窗口&#xff1a;driver.maximize_window() 5、添加全局的等待…...

NReco.LambdaParser使用案例

使用案例集合&#xff1a; private async void RuleEngine_Click(object sender, EventArgs e){#region 获取变量string expression this.Rule.Text.Trim();string pattern "\$(.*?)\$";MatchCollection matches Regex.Matches(expression, pattern);foreach (Ma…...

苹果IOS安装IPA, plist形式 Safari 浏览器点击安装

快速链接 苹果开发者账号链接 网址: https://developer.apple.com/account 苹果应用上架链接 网址: https://appstoreconnect.apple.com/ 应用证书文件及打包 参考教程: 最新uniapp打包IOS详细步骤&#xff08;2022&#xff09; 证书在线制作工具 网址: https://app.121xuexi.…...

Django 注册及创建订单商品

注册功能的实现 user/views from rest_framework.generics import GenericAPIView from rest_framework.views import APIViewfrom apps.user.models import User from apps.user.serializers import UserSerializer from utils import ResponseMessage from utils.jwt_auth …...