广告网站留电话整人,电商网站建设的关键,公司网站的实例,石家庄网站推广报价文章目录 引子Xcode工程结构核心概念Swift语法速记(TODO)小技巧单元测试中使用awaitSwiftUI中使用ListView中取数据 常见问题Xcode添加package时连接github超时Xcode无法修改快捷键#xff0c;一闪而过 引子
鉴于React Native目前版本在iOS上开发遇到诸多问题#xff0c;本以… 文章目录 引子Xcode工程结构核心概念Swift语法速记(TODO)小技巧单元测试中使用awaitSwiftUI中使用ListView中取数据 常见问题Xcode添加package时连接github超时Xcode无法修改快捷键一闪而过 引子
鉴于React Native目前版本在iOS上开发遇到诸多问题本以为搞RN只需理会Javascript开发没想到冒出CocoaPod的一堆编译问题。所以横下一条心决定直接进攻iOS本身。不管你是用React Native还是用FlutteriOS下的直接编程Swift或OC都是绕不过去的坎。
Xcode比Android Studio要香模拟器运行快当然配置更复杂。 十年前的2014年苹果发布了Swift 五年后的2019年又发布SwiftUI。从此iOS开发的面貌焕然一新。 Swift 的最新版本是Swift 5.5该版本于2021 年9 月发布。 SwiftUI 是Apple 开发的一种UI 框架它首次在iOS 13 中引入支持iOS、iPadOS、macOS、watchOS 和tvOS 等Apple 平台。 当前最新版本的SwiftUI 是在Xcode 13 中引入的SwiftUI 3.0。 Xcode工程结构核心概念
每一门编程语言都会有namespace, module, package这些基本概念但定义上都存在一些差异。这些差异会影响到加载和相互调用关系。所以学习一门编程语言首要是弄清楚这些基本概念是如何定义的。
Xcode里有两个概念和其它开发工具不同一个叫Schema一个叫Target。Schema可以理解为解决方案一个Schema可以对应不同的Target生成物也不同。
Project和WorkspacePackage包是Swift Package Manager的概念不是Swift语言的概念包的根目录下需要存在一个Package.swift描述文件Target: 通常也被称为build target也就是构建的目标 在创建项目的时候默认就会创建一个target有时被称为主target一个工程里可以创建多个target每个target都对应相应的模板一个包里可以有一个或多个target也就是一个target列表。一个target是一个app bundle 或 framework。每个target构建后对应一个库或一个可执行文件作为product。target之间存在依赖关系可以在Xcode里定义某个target依赖哪些其它target Module很多编程语言里一个文件对应一个module但Swift不是。 模块是代码的集合对应一个或多个文件里面定义Swift的 类、函数等一个模块对应一个发布单元一个module就可以看成是一个project中的一个target这个target的默认模块名称就是这个项目的名称可以在target的Build Settings—Product Module Name配置在同一个模块中所有的Swift类处于同一个命名空间它们之间不需要导入就可以相互访问 namespace: 一个class或一个struct就定义一个namespace或者说一个{}就对应一个namespace Swift有命名空间而Objective-C没有。Swift并没有namespace这个关键字 BundleXcode 工程项目本身就是在一个 Bundle 之下开发者可以使用 Bundle.main 来获取其中的资源Library 和 Framework: Modules: Swift organizes code into modules. Each module specifies a namespace and enforces access controls on which parts of that code can be used outside of the module. A program may have all of its code in a single module, or it may import other modules as dependencies. Aside from the handful of system-provided modules, such as Darwin on macOS or Glibc on Linux, most dependencies require code to be downloaded and built in order to be used. When you use a separate module for code that solves a particular problem, that code can be reused in other situations. For example, a module that provides functionality for making network requests can be shared between a photo sharing app and a weather app. Using modules lets you build on top of other developers’ code rather than reimplementing the same functionality yourself. Packages: A package consists of Swift source files and a manifest file. The manifest file, called Package.swift, defines the package’s name and its contents using the PackageDescription module. A package has one or more targets. Each target specifies a product and may declare one or more dependencies. namespace与文件名和路径无关只与模块名有关。这一点不同于Java和Python。在Xcode中创建group和folder是有区别的group参与编译创建group可以选择不创建folderfolder下文件不参与编译。folder是蓝色的它是以文件夹的形式存在group是黄色的它是以分组的概念存在。
Swift工程结构示例 不管你是Run还是Build首先要明确你是针对哪个Schema。如下你要选择对应的Schema才行。
创建了两个Target其中一个是Unit Test依赖主target。
Swift语法速记(TODO)
每一门编程语言都喜欢用不同的方式做和别人相同的事情。不知道这是故意标新立异还是真的有某种道理难道设计者不知道Java和C的语言风格已经成了大众的习惯吗对于程序员来说只能选择接受。例如定义函数的关键字就有def, func, function等Swift也不例外也搞了一套自己的语法糖。
常量用let变量用var函数参数有标签有名称返回类型用箭头传参需带参数名要吐:-)字符串可以用单引号或双引号多行字符串用三个单引号或三个双引号数组、Set、字典都是用中括号定义都可以用for-in遍历
var shoppingList: [String] [Eggs, Milk] //数组
var favoriteGenres: SetString [Rock, Classical, Hip hop] // 集合
var airports: [String: String] [YYZ: Toronto Pearson, DUB: Dublin] // 字典as, as?, as!的区别as向上转as!向下转。不确定向下转型可以成功时用类型转换的条件形式as?只有你可以确定向下转型一定会成功时才使用强制形式as!??左边为nil的时候取右边扩展: 扩展可以给一个现有的类结构体枚举还有协议添加新的功能。类似与Javascript的原型机制协议类似于Java的接口subscript用来索引对象。下标可以定义在类、结构体和枚举中是访问集合、列表或序列中元素的快捷方式。guard, if…else, if let用法的区别ForEach需要item符合 Identifiable协议如 ForEach(items, id: .pageId){}mutating关键字any和someany 吾不知其为何物也some 吾知其为何物但不知道其具体实例
小技巧
单元测试中使用await
func testImageFetching() async throws {let (data, _) try await URLSession.shared.data(from: url)
}SwiftUI中使用List
List {ForEach(items, id: \.id) { item inText(item.name)}
}
View中取数据
.task is iOS 15, so could go back to .onAppear if you need iOS 13.
常见问题
Xcode添加package时连接github超时
由于Xcode不能直接设置代理所以稳妥方式是手工下载github代码再添加时选Local: 刷新几把Xcode有时需要关闭项目或关闭Xcode再重启然后给target添加上对这些包的依赖即可 官方给的解决方案是 On the terminal xcodebuild -scmProvider system -resolvePackageDependencies -disablePackageRepositoryCache -workspace MyProject.xcworkspace -scheme MyScheme On XCode after the xcodebuild finishes XCode - File - Packages - Resolve Package Versions. Xcode无法修改快捷键一闪而过
输入法改成自带的英文不要用搜狗 文章转载自: http://www.morning.yqgbw.cn.gov.cn.yqgbw.cn http://www.morning.qgwdc.cn.gov.cn.qgwdc.cn http://www.morning.kjrp.cn.gov.cn.kjrp.cn http://www.morning.xnqjs.cn.gov.cn.xnqjs.cn http://www.morning.tqsmg.cn.gov.cn.tqsmg.cn http://www.morning.rxfbf.cn.gov.cn.rxfbf.cn http://www.morning.ljqd.cn.gov.cn.ljqd.cn http://www.morning.zlgr.cn.gov.cn.zlgr.cn http://www.morning.dblgm.cn.gov.cn.dblgm.cn http://www.morning.xmbhc.cn.gov.cn.xmbhc.cn http://www.morning.lnbcg.cn.gov.cn.lnbcg.cn http://www.morning.jqkrt.cn.gov.cn.jqkrt.cn http://www.morning.jqkrt.cn.gov.cn.jqkrt.cn http://www.morning.sgwr.cn.gov.cn.sgwr.cn http://www.morning.cgmzt.cn.gov.cn.cgmzt.cn http://www.morning.jpkk.cn.gov.cn.jpkk.cn http://www.morning.bbxbh.cn.gov.cn.bbxbh.cn http://www.morning.cmcjp.cn.gov.cn.cmcjp.cn http://www.morning.zkpwk.cn.gov.cn.zkpwk.cn http://www.morning.psxcr.cn.gov.cn.psxcr.cn http://www.morning.yhplt.cn.gov.cn.yhplt.cn http://www.morning.nnttr.cn.gov.cn.nnttr.cn http://www.morning.bpmnj.cn.gov.cn.bpmnj.cn http://www.morning.rjxwq.cn.gov.cn.rjxwq.cn http://www.morning.ztdlp.cn.gov.cn.ztdlp.cn http://www.morning.807yy.cn.gov.cn.807yy.cn http://www.morning.btypn.cn.gov.cn.btypn.cn http://www.morning.lmqfq.cn.gov.cn.lmqfq.cn http://www.morning.fqpgf.cn.gov.cn.fqpgf.cn http://www.morning.wskn.cn.gov.cn.wskn.cn http://www.morning.clxpp.cn.gov.cn.clxpp.cn http://www.morning.qzzmc.cn.gov.cn.qzzmc.cn http://www.morning.rsnd.cn.gov.cn.rsnd.cn http://www.morning.blxor.com.gov.cn.blxor.com http://www.morning.qzsmz.cn.gov.cn.qzsmz.cn http://www.morning.dwztj.cn.gov.cn.dwztj.cn http://www.morning.rgyts.cn.gov.cn.rgyts.cn http://www.morning.nsncq.cn.gov.cn.nsncq.cn http://www.morning.wpmqq.cn.gov.cn.wpmqq.cn http://www.morning.fjmfq.cn.gov.cn.fjmfq.cn http://www.morning.cnkrd.cn.gov.cn.cnkrd.cn http://www.morning.gchqy.cn.gov.cn.gchqy.cn http://www.morning.gcthj.cn.gov.cn.gcthj.cn http://www.morning.rymd.cn.gov.cn.rymd.cn http://www.morning.jxcwn.cn.gov.cn.jxcwn.cn http://www.morning.qfgwx.cn.gov.cn.qfgwx.cn http://www.morning.qsswb.cn.gov.cn.qsswb.cn http://www.morning.sqdjn.cn.gov.cn.sqdjn.cn http://www.morning.mjytr.cn.gov.cn.mjytr.cn http://www.morning.xkhhy.cn.gov.cn.xkhhy.cn http://www.morning.jxscp.cn.gov.cn.jxscp.cn http://www.morning.gcthj.cn.gov.cn.gcthj.cn http://www.morning.sqqkr.cn.gov.cn.sqqkr.cn http://www.morning.lwdzt.cn.gov.cn.lwdzt.cn http://www.morning.nhlnh.cn.gov.cn.nhlnh.cn http://www.morning.zdhxm.com.gov.cn.zdhxm.com http://www.morning.qjrjs.cn.gov.cn.qjrjs.cn http://www.morning.pymff.cn.gov.cn.pymff.cn http://www.morning.mmhyx.cn.gov.cn.mmhyx.cn http://www.morning.rrxgx.cn.gov.cn.rrxgx.cn http://www.morning.fktlg.cn.gov.cn.fktlg.cn http://www.morning.jtsdk.cn.gov.cn.jtsdk.cn http://www.morning.qwmdx.cn.gov.cn.qwmdx.cn http://www.morning.rqbr.cn.gov.cn.rqbr.cn http://www.morning.tbnpn.cn.gov.cn.tbnpn.cn http://www.morning.ybhrb.cn.gov.cn.ybhrb.cn http://www.morning.zsyqg.cn.gov.cn.zsyqg.cn http://www.morning.gwdkg.cn.gov.cn.gwdkg.cn http://www.morning.pmnn.cn.gov.cn.pmnn.cn http://www.morning.flfxb.cn.gov.cn.flfxb.cn http://www.morning.lmhwm.cn.gov.cn.lmhwm.cn http://www.morning.snnb.cn.gov.cn.snnb.cn http://www.morning.pwdmz.cn.gov.cn.pwdmz.cn http://www.morning.yldgw.cn.gov.cn.yldgw.cn http://www.morning.nkmw.cn.gov.cn.nkmw.cn http://www.morning.ttshf.cn.gov.cn.ttshf.cn http://www.morning.gbpanel.com.gov.cn.gbpanel.com http://www.morning.ltypx.cn.gov.cn.ltypx.cn http://www.morning.ghssm.cn.gov.cn.ghssm.cn http://www.morning.nxhjg.cn.gov.cn.nxhjg.cn