![0749bb70dc4fc850f468632b56163da8.png](https://i-blog.csdnimg.cn/blog_migrate/aea2075a6fdb146111822a8c72719a50.jpeg)
学习之前你要有所准备,它不仅会花费你的一些时间,也许还会花费你的一些钱: 首先:你需要一个苹果电脑,MacBook、MacBook Pro、Mac mini都可以,MacBook Air是不行的,记住。如果你买的是iMac、iMac Pro、Mac Pro的话,请务必留下联系方式。土豪,我们交个朋友吧!钱能解决的问题都不是问题,记得有钱就买好一点的。如果你现在啥都买不起,哈哈,那你只能等到下一次了,在基于C#开发Micrsoft程序时再见,那个程序也叫“iWriter”。 其次:你需要安装Xcode,这个不要钱。听我的,点击系统左上角“”,选择下拉菜单中“App Store...”,在跳出的App Store窗体的左上角里搜索“Xcode”,找到名为“Xcode”的程序点击"获取",等待安装完成。
这里,我们即将迎来iWriter的开发之战。在吹响冲锋号之前,首先我们需要了解Swift5.1。对,你没看错,我们这里用的是Swift5.1,并会及时使用最新版本。所以你我要同步,因为大部分代码都需要你试着运行在Xcode。
来吧,启动Xcode:打开Xcode,选择“Get started with a playground”,选择“macOS”下的“Blank”,在下一步里选定保存位置,就可以了。我们开始铸造王者之剑。
如果,你有其它程序的开发经验,了解本章你只需要看下面10点。
本章讲的是函数编程部分。枚举、结构体、类下一章再讲。
- let声明常量。
let π:Double = 3.14
2. 未赋值不可使用。
var name:String // 变量声明
print(name)
// error: variable 'name' used before being initialized
3. 使用字符串用双引号或3个双引号,注意是3个双引号。
使用3个双引号包裹字符串,能保留字符串的格式。如宿进,分行
在使用3个双引号的方式中,如果某行的行末有“”符号,那表示下一行与本行是连接在一起的。
字符串字面量内,可通过“(value)”格式插入变量或常量值。类似PHP的$value.
var str = "Jiang Youhua"
var words = """
(str) is a good person.
He is working very
hard.
"""
print(words)
// Prints Jiang Youhua is a good person.
// He is working very hard.
var _ = 3+4 //
4. for 语句不同,使用for-in , 提供“...”、“..<”表示遍历的范围。
let names = ["Anna", "Alex", "Brian", "Jack"]
for name in names {
// TODO
}
for i in 1...5 {
// TODO
}
for i in stride(from: 0, through: 12, by: 4) {
print(i)
}
5. do-while改为repeat-while。do用在错误捕捉上do-catch。
6. switch语句可以使用范围,各case默认为break,使用关键词"fallthrough"确定流入下case。
let score:Int = 95
switch a {
case 100:
// TODO
case 95, 96, 97, 98, 99:
// TODO
case 80..<95:
// TODO
case 62..<80:
// TODO
case 60, 61:
// TODO
fallthrough
default:
// TODO
}
7. 提供Tuple。访问Tuple元素,可通过键或索引。
let result = ("Bad request", 400) // result.0 is 'Bad request'
let person = (name: "JiangYouhua", gender: true, age:12) // person.age is 12
8. 除Array,Dictionary之外,提供了Set。Set是同类元素的集合,不保存相同值。
var threeNumbers = [1, 3, 2] // Array
var aliasesOfCities:Dictionary = ["昆明":"春城", "上海":"魔都",] // Dictionary
var subjects:Set = ["Chinese", "English", "Mathematics", "English"] // Set
print(subjects) // Prints ["English", "Mathematics", "Chinese"]
9. Function保留了Objective-C的特征,调用时需要参数名。但为了与闭包协调,提供添参数别名功能,这时调用函数使用的是参数别名。然后又提供“_”符表示匆略,使用它作参数别名,调用函数可忽略参数名。
说了那么多被绕进去了,看代码吧
// 函数
func point(x:Int, y:Int)->(String, Bool){
if x < 0 || y < 0 {
return ("Err", false)
}
return ("Point.x = (x), Point.Y = (y)", true)
}
point(x:100, y:200) //(.0 "Point.x = 100, Point.Y = 200", .1 true)
// 参数使用别名
func pointOfLayout(width x:Int, height y:Int)->(String, Bool){
if x < 0 || y < 0 {
return ("Err", false)
}
return ("Point.x = (x), Point.Y = (y)", true)
}
pointOfLayout(width: 240, height: 160) //(.0 "Point.x = 240, Point.Y = 160", .1 true)
// 参数忽略别名
func pointOfWord(_ x:Int, _ y:Int)->(String, Bool){
if x < 0 || y < 0 {
return ("Err", false)
}
return ("Point.x = (x), Point.Y = (y)", true)
}
pointOfWord(320, 129) // (.0 "Point.x = 320, Point.Y = 129", .1 true)
// 可变参数
func income(_ money:Double...){
var d = 0.0
for m in money {
d += m
}
print("The money added up to (d)")
}
income(1,2,2,2,5,5) // Prints The money added up to 17.0
10. 闭包、尾随闭包、闭包转义。
闭包的格式:{ (parameters) -> return type in statements }
/** 1. 定义一个使用闭包的函数 **/
func pointOfLayout(point:(_ x:UInt32, _ y:UInt32)->String) {
let x = arc4random() % 1280
let y = arc4random() % 960
let a = point(x, y)
print(a)
}
/** 2. 常规调用闭包,参考上面第5点 **/
pointOfLayout(point: {
"point.x = ($0), point.y = ($1)"})
// Prints point.x = 1181, point.y = 382
/** 3. 尾随调用诸包,一种语法糖形式 **/
pointOfLayout{
"point.x = ($0), point.y = ($1)"}
// Prints point.x = 1101, point.y = 531
/** 4. 当闭包未在函数内调用时,需要使用闭包转义,使用关键字:@escaping **/
var closures: [() -> Void] = []
func notCalledClosure(closure: @escaping () -> Void) {
closures.append(closure) // 没有被调用,保存起来了
}
当然,你也可以跟我一起,从零开始,这个就比较长一点。
下面的swift学习教程,是精简版,是本项目开发中所必需要了解的。如果你想成为Swift的高手,那你需要《葵花宝典》,请上官网查找:[The Swift Programming Language]。<
当你看到这里,还没回头,那表明你需要进一步的学习。所以确认已经打开了你的Xcode,我们将边做边学。下面的代码你都需要输入你的Playground里,运行看看。
鼠标移到行号上,点击你看到的播放图标,就可以运行当前行以上的代码。