经验分享 未读
SwiftUI 学习笔记 28:挑战 4-3 睡眠时间预测挑战
将VStack表单中的每个替换为Section,其中文本视图是该部分的标题。你喜欢此布局还是该VStack布局?这是你的应用-你可以选择!
用Picker显示相同数值范围的“杯数”步进器代替。
更改用户界面,以使其始终使用漂亮的大字体显示建议的就寝时间。你应该可以完全删除“计算”按钮。
遇到的困难ForEach数字循环需要从0开始ForEach中第1个变量可以用 $0 代替在此项目情境下,使用do catch组合时,return要放在do catch内。
代码1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495import SwiftUIstruct ContentView: View { @State private var sleepAmount = ...
经验分享 未读
SwiftUI 学习笔记 27:项目 4-2 睡眠时间预测NavigationView 中导航栏添加按钮
使用 .navigationBarItems
123.navigationBarItems(trailing: // our button here)
按钮调用一个方法首先,我们需要一个用于按钮调用的方法,因此添加一个空calculateBedtime()方法,如下所示:
12func calculateBedtime() {}
在我们的案例中,我们想用“计算”按钮替换该注释。之前我曾解释过按钮有两种形式:
123456789Button("Hello") { print("Button was tapped")}Button(action: { print("Button was tapped")}) { Text("Hello")}
如果需要,我们可以在这里使用第一个选项:
123Button("Calculate") ...
经验分享 未读
SwiftUI 学习笔记 26:项目 4-1 睡眠时间预测步进器
123Stepper(value: $sleepAmount, in: 4...12, step: 0.25) { Text("\(sleepAmount, specifier: "%.2f") hours") }
in代表范围,step代表每次点击变化的幅度。value绑定之前设置过的@state状态。
日期选择器使用日期选择器之前需要创建一个Date()属性:
1@State private var wakeUp = Date()
然后,你可以将其绑定到日期选择器,如下所示:
123var body: some View { DatePicker("Please enter a date", selection: $wakeUp)}
如果要隐藏日期选择器的标题,除了删除掉文本标签(这样会使屏幕阅读器的用户无法使用)还可以将日期选择器包裹在Form表单
12345var body: some View { Form ...
经验分享 未读
SwiftUI 学习笔记 25:项目 1-3 总结你学到了什么
你现在已经完成了前两个SwiftUI项目,并且还完成了一个技术项目–两个应用程序的相同节奏和一个技术项目一直持续到课程结束,并且将帮助你在花时间的同时快速提高知识水平返回并完善你所学。
尽管我们只是SwiftUI的三个项目,但你已经了解了一些最重要的概念:视图,修饰符,状态,堆栈布局等–这些是你将在SwiftUI中一次又一次使用的技能,为什么我想早点把它们弄下来,
当然,你还构建了一些实际项目并完成了许多编码挑战,以帮助巩固你的学习,因此希望你开始对自己的知识有所了解。
到目前为止,我们已经介绍了:
构建将文本与控件(例如)混合的滚动表单,PickerSwiftUI会变成漂亮的基于表格的布局,在其中可以以新的选择滑动新屏幕。
创建一个NavigationView并为其命名。这不仅使我们能够将新的视图推送到屏幕上,而且还使我们能够设置标题并避免日以继夜的内容出现问题。
如何使用@State存储变化的数据,以及为什么需要它。请记住,我们所有的SwiftUI视图都是结构,这意味着如果没有类似的内容就无法更改它们@State。
为TextField和等用户界面控件创建双向绑定P ...
经验分享 未读
SwiftUI 学习笔记 24:项目 3-2 挑战挑战
最好的学习方法之一是尽可能多地编写自己的代码,因此,你应该尝试以下三种方式扩展此应用程序,以确保你完全了解正在发生的事情:
挑战1创建一个自定义ViewModifier(和附带的View扩展名),使视图具有适合视图中显着标题的大的蓝色字体。
12345678910111213141516171819202122232425262728293031import SwiftUIstruct ---title: ViewModifier{ func body(content: Content) -> some View { content .font(.title) .foregroundColor(.blue) }}extension View { func titleStyle() -> some View { self.modifier(Title()) }}struct Con ...
经验分享 未读
SwiftUI 学习笔记 23:项目 3-1 自定义修饰符和自定义容器背景填充整个屏幕
我们可以通过使用frame()修饰符来做到这一点,同时传入.infinity其最大宽度和最大高度。
123Text("Hello World") .frame(maxWidth: .infinity, maxHeight: .infinity) .background(Color.red)
使用maxWidth并maxHeight与使用不同width和height-我们不是说文本视图必须占用所有的空间,只知道它可以。如果周围还有其他视图,SwiftUI将确保它们都获得足够的空间。
默认情况下,你的视图不会离开安全区域,但是你可以使用如下edgesIgnoringSafeArea()修饰符来更改它:
1234Text("Hello World") .frame(maxWidth: .infinity, maxHeight: .infinity) .background(Color.red) .edgesIgnoringSafeArea(.all)
条件修饰符如果你拥有一个可以为true或false的 ...
经验分享 未读
SwiftUI 学习笔记 22:项目 2-3 挑战挑战
最好的学习方法之一是尽可能频繁地编写自己的代码,因此,你应该尝试以下三种方式扩展此应用程序,以确保你完全了解正在发生的事情:
添加一个@State属性来存储用户的分数,在答案正确与否时对其进行修改,然后将其显示在警报中。
在标志正下方的标签中显示玩家的当前得分。
如果有人选择了错误的标志,请在你的警报消息中告诉他们他们的错误-诸如“错误!那就是法国的国旗。”
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182//// ContentView.swift// GuessTheFlag//// Created by 张洪Hoo on 2020/1/20.// Copyright © 2020 张洪Hoo. All rights reserved.//import SwiftUIstruct ContentView: ...
经验分享 未读
SwiftUI 学习笔记 21:项目 2-2 制作猜国旗应用生成随机数
1var correctAnswer = Int.random(in: 0...2)
该Int.random(in:)方法会自动选择一个随机数
在按钮上插入图片123456Button(action: { // flag was tapped }) { Image(self.countries[number]) .renderingMode(.original) }
该renderingMode(.original)修饰符告诉SwiftUI呈现原始图像的像素,而不是试图重新着色他们作为一个按钮。
随机化数组顺序shuffled()方法会自动为我们处理随机化数组顺序。
1var countries = ["Estonia", "France", "Germany", "Ireland", "Italy", "Nigeria", "Poland&q ...
经验分享 未读
SwiftUI 学习笔记 20:项目 2-1 制作猜国旗应用填充颜色
除了使用.background(Color.red)以外的方式,我们还可以用ZStack来设置颜色:
如果要在文本后面的整个区域填充红色,则应将颜色单独放置为ZStack–视为整体视图:
1234ZStack { Color.red Text("Your content")}
实际上,它本身Color.red 就是一种视图,这就是为什么可以像形状和文本一样使用它的原因。它会自动占用所有可用空间,但是你也可以使用frame()修饰符来询问特定的大小:
1Color.red.frame(width: 200, height: 200)
内置颜色、语义颜色SwiftUI为我们提供了内置的色彩与工作,比如一些Color.blue,Color.green等等。我们也有一些语义颜色:这些颜色不会说出它们所包含的色调,而是描述它们的用途。
例如,Color.primary是SwiftUI中文本的默认颜色,根据用户设备是在亮模式还是暗模式运行,颜色将为黑色或白色。也有Color.secondary,根据设备的不同,颜色也可能是黑色或白色 ...
经验分享 未读
SwiftUI 学习笔记 19:挑战 1 单位转换应用这是第一个挑战日,挑战日题目:
你的挑战你需要构建一个处理单位转换的应用程序:用户将选择一个输入单位和一个输出单位,然后输入一个值,然后查看转换的输出。
你选择哪种单位取决于你,但是你可以选择以下单位之一:
温度转换:用户选择摄氏度,华氏度或开氏度。
长度转换:用户选择米,公里,英尺,码或英里。
时间转换:用户选择秒,分钟,小时或天。
体积转换:用户选择毫升,升,杯,品脱或加仑。
如果要进行长度转换,则可能有:
输入单位的米,千米,英尺,码或英里的分段控件。第二个分段控件,用于输出单位的米,公里,英尺,码或英里。用户在其中输入数字的文本字段。文本视图,显示转换结果。因此,如果选择米作为源单位,将英尺作为输出单位,然后输入10,则将看到32.81作为输出。
提示你已经知道完成该项目所需的一切,但是如果遇到问题,那么我会提供一些可能有用的提示。
首先,我们所有的单位转换都是简单的数学运算,但是你不应该尝试编写将转换从每个源单位转换为另一个单位的转换。一个更好的主意是将用户的输入转换为单个基本单位,然后从那里转换为目标单位。
因此,与其编写代码来将公升转换成毫升,从公升转换成杯子,从公升 ...
经验分享 未读
SwiftUI 学习笔记 18:总结及审查SwiftUI在每个父级内部最多允许10个子级视图
如果要添加更多内容,则应将视图放入组中。Group{}
使用SwiftUI中的选择器视图创建分段控件当我们在.pickerStyle(SegmentedPickerStyle())修改器上应用修改器时,它们会采用分段样式。
keyboardType()让我们改变在文本字段获得焦点时显示的键盘有很多选项可供选择,包括数字键盘,十进制键盘等等。.numberPad 数字键盘.decimalPad 带小数点的数字键盘
挑战将昨天的代码进行完善,挑战题目如下:
最好的学习方法之一是尽可能多地编写自己的代码,因此,你应该尝试以下三种方式扩展此应用程序,以确保你完全了解正在发生的事情:
在第三部分添加标题,即“每人的金额”
添加另一部分以显示支票的总金额,即原始金额加上小费值,而不用人数来划分。
将“人数”选择器更改为文本字段,确保使用正确的键盘类型。
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474 ...
经验分享 未读
SwiftUI 学习笔记 17:项目1-2 小费计算使用picker点击没反应
需要一个navigationview{}视图。
SwiftUI 想要做的事情-这也是为什么在行的右边缘添加了灰色显示指示器的原因-展示了一个带有选择器选项的新视图。为此,我们需要添加一个导航视图,该导航视图执行以下两项操作:在顶部留出一定空间以放置标题,并根据需要让iOS在新视图中滑动。
因此,直接在表单add之前NavigationView {,以及在表单的右括号之后添加另一个右括号。如果操作正确,则代码应如下所示:
1234567var body: some View { NavigationView { Form { // everything inside your form } }}
Form中的Section项目添加描述文本(分组标题)为Section添加header属性
1234567Section(header: Text("How much tip do you want to leave?")) ...
经验分享 未读
SwiftUI 学习笔记 16:项目1-1 小费计算之前因为是基础知识,将笔记记录得跟教程一样,其实就是方便自己日后检索这些基础知识。从今天开始将真正作为笔记来完成。愿景就是用博客创建一个知识库。
创建Xcode项目时的初始文件说明在Xcode内部,你应该在左侧的空间中看到以下文件,这称为项目导航器:
AppDelegate.swift包含用于管理你的应用程序的代码。在这里添加代码曾经很常见,但是如今却很少见。
SceneDelegate.swift包含用于在应用程序中启动一个窗口的代码。这在iPhone上没有多大作用,但在iPad上(用户可以同时打开你的应用的多个实例),这很重要。
ContentView.swift包含程序的初始用户界面(UI),并且我们将在该项目中完成所有工作。
Assets.xcassets是资产目录 –你要在应用程序中使用的图片的集合。你还可以在此处添加颜色,以及应用程序图标,iMessage贴纸等。
LaunchScreen.storyboard是一个可视化编辑器,用于创建一小段UI来显示应用程序启动的时间。
Info.plist是一个特殊值的集合,这些特殊值向系统描述了你的应用程序的工作方式-它是哪个版本 ...
经验分享 未读
SwiftUI 学习笔记 15:快速回顾(三)已经完成了所有关于Swift基础的部分,感觉东西说多不多,说少也确实有一些部分理解起来有一些困难。从前天开始的三天为快速回顾(因为是快速回顾名,我只是浏览一遍唤醒记忆,直接摘录机器翻译,以后再人工校正):
属性结构和类(统称为“类型”)可以具有自己的变量和常量,这些称为属性。这些使你可以将值附加到类型上以唯一表示它们,但是由于类型也可以具有方法,因此你可以使它们根据自己的数据来运行。
现在让我们看一个例子:
12345678910111213struct Person { var clothes: String var shoes: String func describe() { print("I like wearing \(clothes) with \(shoes)") }}let taylor = Person(clothes: "T-shirts", shoes: "sneakers")let other = Person(clothes ...
经验分享 未读
SwiftUI 学习笔记 14:快速回顾(二)已经完成了所有关于Swift基础的部分,感觉东西说多不多,说少也确实有一些部分理解起来有一些困难。从昨天开始的三天为快速回顾(因为是快速回顾名,我只是浏览一遍唤醒记忆,直接摘录机器翻译,以后再人工校正):
函数函数使你可以定义执行特定功能的可重用代码段。通常,函数能够接收一些值来修改其工作方式,但这不是必需的。
让我们从一个简单的函数开始:
123func favoriteAlbum() { print("My favorite is Fearless")}
如果你将该代码放到操场上,将不会打印任何内容。是的,这是正确的。没有打印任何内容的原因是,我们已将“我最喜欢的是Fearless”消息放入名为的函数中favoriteAlbum(),并且直到我们要求Swift运行该favoriteAlbum()函数时,该代码才会被调用。为此,请添加以下代码行:
1favoriteAlbum()
该函数运行(或“调用”)该函数,因此现在你将看到“我的最爱是Fearless”打印出来。
如你所见,你可以通过编写func,然后是你的函数名,然后打开和关闭 ...
经验分享 未读
SwiftUI 学习笔记 13:快速回顾(一)已经完成了所有关于Swift基础的部分,感觉东西说多不多,说少也确实有一些部分理解起来有一些困难。从这天开始的三天为快速回顾(因为是快速回顾名,我只是浏览一遍唤醒记忆,直接摘录机器翻译,以后再人工校正):
变量和常量每个有用的程序都需要在某个时刻存储数据,在Swift中,有两种方法可以存储数据:变量和常量。变量是可以随时更改其值的数据存储,而常量是可以设置一次且永不更改的数据存储。因此,变量的值可以变化,常量的值是恒定的-简单,对吧?
拥有这两个选项似乎毫无意义,毕竟你只能创建一个变量,然后再不更改它–为什么需要将其设为常量?好吧,事实证明,许多程序员都很震惊!–在编程方面还不完美,我们会犯错误。
分离常量和变量的优点之一是Xcode会告诉我们是否犯了错误。如果我们说“使该日期成为一个常数,因为我知道它永远不会改变”,那么在10行之后尝试更改它,Xcode将拒绝构建我们的应用程序。
常量也很重要,因为它们使Xcode可以决定其构建应用程序的方式。如果知道值永远不会改变,则可以应用优化以使代码运行更快。
在Swift中,你可以使用var关键字创建变量,如下所示:
1var name = ...
经验分享 未读
SwiftUI 学习笔记 12:处理空变量空引用(字面意义上是变量没有值)是1965年托尼·霍尔(Tony Hoare)发明的。回想起有关空引用的问题,他说:“我称之为十亿美元的错误”,因为它们导致了很多问题。
它专门用于Swift的null引用解决方案(称为optionals)的解决方案。
本质上,一个可选的方法试图回答“如果我们的变量没有值该怎么办?”这个问题,Swift希望确保我们所有的程序都尽可能安全,因此它有一些非常具体且非常重要的功能!–处理这种可能性的技术。
创建一个为空的变量我们可以让变量为可选项,通过类型后添加?。如果想要创建一个空的变量,我们还需要让变量等于nil,例如:
1var build: Int? = nil
分别处理空变量和有值变量(解包可选项)我们可以使用if let来处理空变量和有值变量。例如:
1var name: String? = nil
如果使用该name.count怎么办?真正的字符串具有一个count属性,该属性存储它具有多少个字母,但这是nil–它是空,不是字符串,因此没有count。
因此,尝试读取name.count是不安全的,Swift不允许这样做。取而代之的是,我们必 ...
经验分享 未读
SwiftUI 学习笔记 11:协议和扩展协议和面向协议的编程(POP)。
POP消除了大型,复杂的继承层次结构,并用可以组合在一起的更小,更简单的协议代替了它们。这确实是Tony Hoare多年前说的话的实现:“在每个大型程序中,都有一个小型程序试图退出。”
协议协议是描述某物必须具有的属性和方法的一种方式。然后,你可以告诉Swift哪些类型使用该协议-这一过程称为采用或遵循协议。
例如,我们可以编写一个可以接受带有id属性的东西的函数,但是我们并不在乎使用什么类型的数据。我们将从创建一个Identifiable协议,该协议将要求所有符合条件的类型都具有一个id可以读取(“ get”)或写入(“ set”)的字符串:
123protocol Identifiable { var id: String { get set }}
我们无法创建该协议的实例-它是描述,而不是类型本身。但是我们可以创建一个符合它的结构:
123struct User: Identifiable { var id: String}
最后,我们将编写一个displayID()接受 ...
经验分享 未读
SwiftUI 学习笔记 10:类这是一个强大的功能,这是毫无疑问的,并且在开始构建真正的iOS应用程序时也没有避免使用类的方法。但是请记住要使代码简单:仅仅因为功能存在,并不意味着你需要使用它。正如马丁·福勒(Martin Fowler)所说,“任何傻瓜都可以编写计算机可以理解的代码,但是优秀的程序员可以编写人类可以理解的代码。”
创建类类与结构相似,但是不自带初始化器,所以必须添加初始化相关的代码。
123456789class Dog { var name: String var breed: String init(name: String, breed: String) { self.name = name self.breed = breed }}
创建该类的实例看起来就像是一个结构一样:
1let poppy = Dog(name: "Poppy", breed: "Poodle")
其他例子:
12class Empty { }let nothing ...
经验分享 未读
SwiftUI 学习笔记 09:结构(二)今天,你将学习结构的一些更高级的功能,这些功能使它们更强大,包括访问控制,静态属性和惰性。是的,懒惰 –比尔·盖茨曾经说过:“我选择一个懒惰的人来做艰苦的工作,因为一个懒惰的人会找到一种轻松的方法来完成它。”在Swift中,惰性是一项重要的性能优化。
初始化程序初始化程序是为这个结构一个初始值。我们可以使用init方法来初始化程序,在之前不需要加func,但是必须要包含所有的参数:
123456789101112struct Zhhoo { var url: String init(){ url = "zhhooo.com" print("default: \(url)") }}var adr = Zhhoo()adr.url = "blog.zhhooo.com"
其他例子:
12345678910111213struct Country { var name: String var usesImperialMeasuremen ...
经验分享 未读
SwiftUI 学习笔记 08:结构(一)因为断网又停了一天,等明天周六和周日各多补一节。
就像极富影响力的一本书《神话人月》(The Mythical Man-Month)的作者弗雷德·布鲁克斯(Fred Brooks)曾经说过的那样:“机智的程序员……通常可以通过将自己与代码分离开来,回馈并考虑数据来做到最好。表示是编程的本质。”
创建结构结构让我们从几个小类型中创建自己的数据类型。例如,你可能将三个字符串和一个布尔值放在一起,并说它代表你的应用程序中的用户。
这些自定义类型(用户,游戏,文档等)构成了我们构建的软件的真正核心。如果你得到这些权则往往你的代码将随之而来。
结构使用struct来创建,例如我创建一个包含字符串的结构:
123struct Zhhoo { var url: String}
类型创建完毕之后我们就可以调用它:
12var adr = Zhhoo(url: "zhhooo.com")print(adr.url)
当然,因为我们创建了变量adr,我们还可以通过点记法来修改它:
1adr.url = "blog.zhhooo.com" ...
经验分享 未读
SwiftUI 学习笔记 07:闭包(下)这几天都没睡好,前天电脑黑屏开不开机了,工作内容都在上面。都快疯了。熬夜也没修复上,硬盘插在主板上也不好使,抱着试试看的态度买了根SATA转USB的线,没想到竟然读盘了,感动。(我曾一度以为我要一朝回到解放前了)。
“能量和毅力征服了一切”
尾随闭包语法接受参数上一次我们使用了一个闭包语法:
123456789func tellmeadr(action: () -> Void){ print("Are you Ready?") action() print("Let's go!")}tellmeadr { print("hello!zhhooo!~")}
() -> Void表示着不接受任何参数也不返回任何数据,在尾随式闭包中调用参数与在从闭包中调用参数格式相同,例如:
12345678910func tellmeadr(action: (String) -> Void){ print("Are you Re ...
经验分享 未读
如何使用 Playground 练习你的 Swift 语法打开Xcode创建一个新的playground
直接确定
输入一个文件名
展开运行代码的终端
长按三角按钮选择自动运行
开始你的编程吧!
经验分享 未读
SwiftUI 学习笔记 06:闭包(上)据说这个很难。加油!
创建一个简单的闭包我们使用变量来调用函数,甚至将函数通过变量传递给另一个函数。来创建一个简单的闭包:
12345let zhhooo = { print("zhhooo.com")}zhhooo()
相当于常量zhhooo中包含了一个没有名字的函数。
在闭包中接受参数在闭包中可以接受参数,但是参数需要在大括号中编写,并且需要带in。例如:
123let zhhooo = {(url: String) in print("welcome go to \(url) !")}
函数和闭包的区别就是,闭包在调用的时候不需要标注参数标签,例如:
1zhhooo("blog.zhhooo.com")
注意:闭包不能使用外部参数标签
在闭包中返回值在闭包中可以返回值,写法类似函数。同样是利用return。
1234567let zhhooo = {(url: String) -> String in return "let' ...
经验分享 未读
SwiftUI 学习笔记 05:函数日进一步。
函数在swift中,函数的调用使用func来进行。例如:
12345678910func pcourse(){ let course = """Hello!Welcome to the zhhooo.com""" print(course) }pcourse()
注意:
函数名区分大小写。
在一般命名的场合,一个函数名出现多个单词时,通常下一个单词首字母大写以便与更好的阅读。
接受参数函数可以接收参数来在调用的时候通过不同情况运行出不同的结果。在函数书写时在括号内标注参数名称和类型比如func pcourse(num: Int){},例如:
123func square(number: Int) { print(number * number)}
当然,在调用的时候需要添加参数:
1square(number: 8)
其他例子:
1234567func square(numbers: [Int]) { for numbe ...
经验分享 未读
SwiftUI 学习笔记 04:循环罗胖:“直面挑战,躬身入局,皆为我辈中人。”
for循环-普通循环for循环在Swift中是非常常见的循环。
12345let count = 1...10for number in count { print("Number is \(number)") }
你也可以循环数组等。如果你不需要创建类似上面例子的number数据,可以使用下划线代替,这样swift就不会创建这个多余的数据了,例如:
12345let albums = ["Red", "1989", "Reputation"]for _ in albums { print("Play in Apple Music.")}
while循环-条件循环while会一直循环到满足条件为止不再循环。
12345678var number = 1while number <= 20 { print(number) number += 1}pri ...
经验分享 未读
SwiftUI 学习笔记 03:运算符和条件始终看目标,并不遥远。加油!
算数运算符在Swift中可以使用算数运算符。
123456789let firstnum = 12let lastnum = 2let othnum = 13let finnum = firstnum + lastnum //计算和 结果为14let fin2num = firstnum - lastnum //计算差 结果为10let fin3num = firstnum * lastnum //计算乘积 结果为24let fin4num = firstnum / lastnum //计算除 结果为6let fin5num = othnum % lastnum //计算余数 结果为1
当然,也可以多次运算,例如:
1let result = 1 + 1 + 1 //结果为3
要注意输出的数字为整数(Int)还是浮点数(Double),例如:
12let num = 5 * 1 //整数let num2 = 5 * 1.0 //浮点数
运算符重载在Swift中运算符的作用可以取决于你给予的值,例如:
1let num = 12 + 12
你也可以连 ...
经验分享 未读
SwiftUI 学习笔记 02:复杂类型万事开头难,加油!
数组在Swift中数组可以用变量和常量,例如
1var city = ["Beijing", "Shanghai", "Guangzhou"]
如果标记了数组类型,那么就需要加方括号来标记数组的类型。
1var city: [String] = ["Beijing", "Shanghai", "Guangzhou"]
当然,常量也可以作为数组
1let city = ["Beijing", "Shanghai", "Guangzhou"]
调用的时候用方括号从0调用
1city[1]
对应的是Shanghai
注意:
1.如果你阅读不存在的项目,Swift就会崩溃。例如,尝试阅读beatles[9]不是一个好主意。
2.如果你使用类型注释,阵列都写在括号:[String],[Int],[Double],和[Bool]。
3.在使用数组时,数组的名称后最好带s例如cities` ...
经验分享 未读
SwiftUI 学习笔记 01:变量相关新的一年,新的开始。我之前有一定Swift、SwiftUI的基础,最近正式开始我的100day之旅。在博客上记录笔记方便以后查阅。
变量在Swift中创建变量格式为:
12var <变量名> = <变量>var age = 23 //数字
当修改变量时,直接调用
1age = 24 //数字
整数及字符串例如:
12var age = 23 //整数var age = "23" //字符串
如果数字是比较长的,为了方便阅读,可以用下划线的方式来作为数字的分隔符。这不会改变数字的内容。
1var population = 1_300_000_000 //整数
多行字符串1234567var txt = """hellomynameisZhangHong"""
末尾的”””需要独占一行
如果只是为了代码的阅读性,不想为字符串增加换行符,可以添加\来换行
1234567var txt = """hello \my \name \is \Zhang ...
转载内容 未读
SwiftUI:手势的实现
本文为转载文章,以下内容来源于
(翻译) SwiftUI -- 手势的实现
Grabin
本文原创作者:Alexander Ershov
本文为转载文章,以下内容来源于
Implementing gestures in SwiftUI
Alexander Ershov
为了实现交互手势,SwiftUI拥有手势协议(Gesture protocol)。确切来说,它实现了5种手势协议。让我们一一探索它们!
让我们从简单的 tap 手势开始。它能够通过 TapGesture 实现。让我们来创建一个能通过点击手势改变自身颜色的简单圆角矩形,你通过下图可以看到此例子的效果。😉
嗯,是时候让我们深入了解代码的实现了:
1234567891011121314151617181 ...