Swift是Apple公司今年WWDC发布的新语言。为了这门新语言,Apple发布了Swift参考指南(Swift reference guide)这本书,我强烈推荐这本书。
不过这本书有点长,如果你没多少时间但是又想快速的学习Swift,那这个教程就适合你。
这个教程大约15分钟,快速的过一遍Swift语言,咱们要过的内容有:变量,控制流,类,最佳实践等等..
为了学习这个Swift教程,你需要下载最新版本的XCode6,你不需要有Swift或者Objective-C语言的经验,不过有经验的话那对理解会有帮助。
重要信息:确保你的XCode是最新版的(去iOS 开发者中心可以确认 ),Swift在快速的改变,我们会尽量根据最新的XCode beta做出教程的更新,代码可能在老的版本上运行不了。
(译者注:现在XCode已经发布正式版了,所以不用担心版本问题)
Playgrounds介绍
启动Xcode6,打开 file\New\file,选择iOS\Source\Playground,点击 Next。
命名文件名为:SwiftTutorial.playground,点击Next,保存文件在一个你自己比较方便的地方。删除文件里的其他信息,保证文件里是清空的状态。
playground 这个新的文件类型,允许你测试Swift代码,可以在边栏看到每行代码运行的结果。举个例子,添加下面代码到playground:
[objc] view plain copy lettutorialTeam=56 leteditorialTeam=23 lettotalTeam=tutorialTeam+editorialTeam
当你选择这些代码行时,你在右边栏能看到每行的结果,很方便,是不是。
Playgrounds 是学习Swift相关的一个非常好的方法,比如体验新的APIs,协议代码或者算法,还可以可视化画图代码。在接下来的教程里,你讲在这个playground上工作。
提示:在这里,我非常推荐你把这个playground文件拖放到OS X系统的Dock快捷方式里。当你像测试一些Swift 代码时,这样你可以像便签一样快速的使用这个文件。
在Swift中的Variables(变量) vs. Constants (常量)
当尝试在playground中添加下面的代码:
totalTeam+=1 你将看到这一行有错误,这是因为totalTeam是个常量,它是不可以被改变的。声明常量用let关键字。如果你想让totalTeam变成一个变量,一个可以改变的值,那就用另外一个关键字声明它:var。
用下面这行代码替换刚才初始化totalTeam的代码:
vartotalTeam=tutorialTeam+editorialTeam 这样没问题了。不过你会想,"为什么不用var声明所有的变量呢,因为它少限制吗?"
不过,用let声明是最佳的实践,因为它允许编译器进行性能优化。记住:优先用let
显式 vs 推断(隐式类型)
到目前为止,你没有给这些常量或变量显式设置任何类型,因为编译器可以根据代码获取到足够的信息自动推断类型。比如,因为设置了tutorialTeam为56,编译器就知道56是个整型,而且自动把tutorialTeam设置为Int型。
如果你想显式的设置类型也可以,替换哪行代码设置tutorialTeam成下面这样:
lettutorialTeam:Int=56 现在你会想,使用显式类型呢,还是用编译器的隐式类型呢。我们相信在实际中使用编译器制动识别的隐式类型比较好。因为这样你可以得到一个非常大的好处:简明和易读的代码。
那么,我们把代码换回隐式类型:
lettutorialTeam=56
Swift的基本类型和流程控制
到目前为止,数据类型你看见了Int这个整型值的例子,不过Switf中还有很多数据类型。
floats and Doubles
Bools
letonSaleInferred=true onSaleExplicit:Bool=false
注意在Swift中用ture/false作为布尔值(不像objective-c的用的是 YES/NO)。
Strings
letnameInferred="WhoopIECushion" nameExplicit:String="WhoopIECushion" String跟你预想的一样,不再像objective-c那样用@作为开头了。这肯能需要有一段时间才能让你的肌肉记忆适应这种写法。
if语句 、string插入
ifonSaleInferred{ println("\(nameInferred)onsalefor\(priceInferred)!") }else{ println("\(nameInferred)atregularprice:\(priceInferred)!") } 这是一个if语句的例子,就像你预想的语言不一样。括住条件的小括号是可选的,但是花括号就算有只有一行代码也是必须的!!
上面代码也展示了一个新的技术:字符串插入。不管你在什么时候想在字符串中插入其他字符串,只需要简单的使用这样的语法:\(你的语句).
在这,你会有疑问,代码的打印信息去哪了?为了能看见打印的信息,请按顺序点开VIEw\Assistant Editor\Show Assistant Editor.
这是教程上面例子的playground文件。
类和方法
在Swift开发中,其中一个最常用的就是创建类和方法,那我们回到正路上。首先,删除你的playground文件里的所有代码,这样你可以从零开始。其次,你将创建一个消费计算器,这个计算器能帮你算清楚你在餐馆用餐后的小费。下面每次一小块一小块的添加代码,同时解释每一步这些代码。
//1
classTipCalculator{ } 创建一个类,只需要简单的输入class这个关键字和类名,再输入一对大括号作为body就可以。如果你是子类化另外一个类,你只需要在需要子类化的类前面用输入:和你的类名。注意如果你没有什么需要继承的,你不需要子类化任何东西(不像 objctive-c,你必须子类化NSObject或者一些NSObject的子类)
添加下面的代码到大括号里
//2
total:Double taxpct:Double letsubtotal:Double 这就是创建类属性的方法,创建变量或者常量都是如此。这里你是创建了常量属性。一个是账单总额(税后) ,一个这个账单的税率,一个是账单的子总额(税后)。
注意,任何一个你声明的属性都需要初始化,或者在初始化方法里初始化。否则你需要把这么声明为可选的(教程的后面会提到)
注意:根据Emily Post Etipedia,小费必须是税前的。所以这个类在计算小费时加上了税前总额!
把下面的代码添加到前面的代码块后面(要在大括号里):
//3
init(total:Double,taxpct:Double){ self.total=total self.taxpct=taxpct subtotal=total/(taxpct+1) }
这里为这个类创建了带有两个参数的初始化方法,初始化方法在Swift中总是以init来命名,你可以有一个或者多个初始化方法。但是你需要通过给方法带上不同的参数来区分。
注意,初始化方法的参数名称和类的属性名称一样,所以需要在类属性名称前面加上self来区分两个变量。
注意,因为没有名称和subtotal属性冲突,所以你不需要添加self关键字,因为编译器会自动完成。是不是很酷!
Add this code after the prevIoUs block (insIDe the curly braces):
// 4
func calcTipwithTipPct(tipPct:Double) -> Double {
return subtotal * tipPct
}
添加以下代码在前面的代码块后面(要在大括号里)
funccalcTipwithTipPct(tipPct:Double)->Double{ returnsubtotal*tipPct }
声明一个方法,需要用func关键字。列出方法的参数(需要显式的类型),在后面添加->符号作为返回的类型。这个方法确定了小费的总额。总额就是简单用subtotal乘以小费百分比。
添加以下代码在前面的代码块后面(要在大括号里)
// 5
funcprintPossibleTips(){ println("15%:\(calcTipwithTipPct(0.15))") println("18%:\(calcTipwithTipPct(0.18))") println("20%:\(calcTipwithTipPct(0.20))") }
这是一个打印三个可能的小费的方法。
注意,当调用一个类实例方法时,第一个参数不用命名(不过后面的必须命名)
同时也注意到,string的插入使用方法不光是用在变量,你可以用在复杂的方法调用和 *** 作。
添加下面的代码在playground文件在最下面(在大括号外)
// 6
下面是这时候你的playground文件的样子:
//1 classTipCalculator{ //2 subtotal:Double //3 init(total:Double,taxpct:Double){ self.total=total self.taxpct=taxpct subtotal=total/(taxpct+1) } //4 funccalcTipwithTipPct(tipPct:Double)->Double{ } //5 funcprintPossibleTips(){ println("15%:\(calcTipwithTipPct(0.15))") println("18%:\(calcTipwithTipPct(0.18))") println("20%:\(calcTipwithTipPct(0.20))") //6 lettipCalc=TipCalculator(total:33.25,248)"> tipCalc.printPossibleTips()
通过Assistant Editor检查代码的结果。
Arrays 和 For循环
上面的代码有点重复,因为你调用了多次calcTipwithTotal方法传入了不同的小费百分比。你可以用array来减少代码的重复。
用下面代码替换printPossibleTips方法里的代码。
letpossibleTipsInferred=[0.15,0.18,0.20] possibleTipsExplicit:[Double]=[0.15,0.20] 这里展示了隐式和显式创建double类型数组的例子,注意[Double]是Array<Double>的缩写。枚举数组所有项跟Objective-C中的快速枚举类似。注意,这里不需要小括号。
你可以这样写循环:
foriin0..<possibleTipsInferred.count{ letpossibleTip=possibleTipsInferred[i] println("\(possibleTiP*100)%:\(calcTipwithTipPct(possibleTip))") }
..< *** 作符是不包含在范围和不包含上限值 *** 作符。当然也有... *** 作符是包含的。
Arrays有count属性,它是数组里项目的数量。你可以通过Arrayname[index]语法访问指定的项。
字典(DictionarIEs)
让我们给小费计算器做最后的改动。除了可以简单打印小费,你可以返回一个字典结果。这回使得结果更简单的展示在app的用户界面上。删除printPossibleTips方法,替换成下面代码:
funcreturnPossibleTips()->[Int:Double]{ letpossibleTipsInferred=[0.15,0.20] //2 varretval=Dictionary<Int,Double>() forpossibleTipinpossibleTipsInferred{ letintPct=Int(possibleTiP*100) retval[intPct]=calcTipwithTipPct(possibleTip) returnretval } 让我们一步一步的来看。
1.这里你设置返回值为dictionary,key是int型(小费比率是一个int,比如15,20)value是一个Double(计算后的小费).注意[Int: Double] 只是Dictionary<Int,Double>的简写.
2.这就是创建创建一个空字典的方法。因为你需要修改字典,所以要把用var来声明变量,而不是用let。否则会编译错误。
3.这里告诉你如何设置一个字典的值。就像你看到的,跟传统的Objective-C类似。
最后,在playground修改代码调用这个方法:
tipCalc.returnPossibleTips()
一旦把代码放到playground里,你就能在inspector看到结果了(点那个眼睛展开视图)
恭喜你,你有了一个Swift版的全功能的小费计算器。
原文地址:http://www.raywenderlich.com/74438/swift-tutorial-a-quick-start
本人水平有限,翻译有错误请不吝支出错误,谢谢。
总结以上是内存溢出为你收集整理的Swift 教程:快速入门全部内容,希望文章能够帮你解决Swift 教程:快速入门所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)