2swift初见翻译numbbbbb校对shinyzhu_第1页
2swift初见翻译numbbbbb校对shinyzhu_第2页
2swift初见翻译numbbbbb校对shinyzhu_第3页
2swift初见翻译numbbbbb校对shinyzhu_第4页
2swift初见翻译numbbbbb校对shinyzhu_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

翻译 校对Swift简单值(Simple控制流(Control函数和闭包(Functionsand对象和类(Objectsand枚举和结构体(Enumerationsand接口和扩展(Protocolsand泛型world”。在Swift中,可以用一行代码实现: o,world") 如果你写过C或者Objective-C代码,那你应该很熟悉这种形式——在Swift中,这行代码就是一个完整的程序。你不需要为了输入输出或者字这个会通过一系列编程例子来让你对Swift有初步了解,如果你有什为了获得最好的体验,在Xcode当中使用代码预览功能。代码预览功能可使用let来常量,使用var来变量。一个常量的值在编译时并不varvarmyVariable=42myVariable=50letmyConstant=letimplicitInteger=70letletimplicitInteger=70letimplicitDouble=70.0letexplicitDouble:Double=创建一个常量,显式指定类型为Float并指定初始值为4letletlabel="Thewidthis"letwidth=94letwidthLabel=label+删除最后一行中的String,错误提示是什么letletapples=letoranges=letletappleSummary="Ihave\(apples)letfruitSummary="Ihave\(apples+oranges)piecesoffruit."varvarList=["catfish","water","blueList[1]="bottleofvaroccupations=["Malcolm":"Captain","Kaylee":]letletemptyArray=letemptyDictionary=Dictionary<String,如果类型信息可以被推断出来,你可以用[]和[:]来创建空数组和空字——就像你变量或者给函数传参数的时候一样 List //使用if和switch来进行条件操作,使用for-in、for、we和do- while来进行循环。条件和循环变量括号可以省略,但是语句体的大括号是必须的。letletindividualScores=[75,43,103,87,varteamScore=forforscorein{ifscore>50{teamScore+=3}elseteamScore+=}}在if语句中,条件必须是一个布尔表达式——这意味着像if{...}这样的代码将报错,而不 地与0做对比一个可选的值可能是一个具体的值或者是nil,表示值缺失。在类型后面varvaroptionalString:String?=optionalString==varoptionalName:String?="JohnAppleseed"vargreeting=" ifletname={greeting= 把optionalName改成nil,greeting会是什么?添加一个else语句,optionalName是nil时给greeting赋一个不同的值letletvegetable="redpepper"switchvegetable{caseantsonament="Addsomeraisinsandcase"cucumber", ment="Thatwouldmakeagoodteasandwich."caseletxwhere}ment="Isitaspicyment="Everythingtastesgood删除default语句,看看会有什么错误你可以使用for-in来遍历字典,需要两个变量来表示每个键值对letletinterestingNumbers["Prime":[2,3,5,7,"Fibonacci":[1,1,2,3,5,"Square":[1,4,9,16,]varlargest=for(kind,numbers)in{fornumberinnumbers{ifnumber>largest{largest=}}}使用while来重复运行一段代码直到不满足条件。循环条件可以在开头var=2n<100n}=n*nvar=2domm*2}m<mForLoop=foriin0..3ForLoop+=}varsecondForLoop=0forvari=0;i<3;++i{secondForLoop+=}使用..创建的范围不包含上界,如果想包含的话需要使用...funcgreet(name:String,day:String)->String returnreturno\(name),todayis}greet("Bob",funcfuncgetGasPrices()->(Double,Double,{return(3.59,3.69,}funcfuncsumOf(numbers:Int...)->{varsum=fornumberin{sum+=}return}sumOf(42,597,funcfuncreturnFifteen()->{vary=10funcadd()y+=}returny}funcfuncmakeIncrementer()->(Int->{funcaddOne(number:Int)->Int{return1+number}return}varincrement=makeIncrementer()funcfunchasAnyMatches(list:Int[],condition:Int->Bool)->Bool{foriteminlistif{return}}return}funclessThanTen(number:Int)->{returnnumber<}varnumbers=[20,19,7,hasAnyMatches(numbers,函数实际上是一种特殊的闭包,你可以使用{}来创建一个闭包。使in来分割参数并返回类型(number:Int)->Intinletresult=3*numberreturnresult重写闭包,对所有奇数返回sort([1,sort([1,5,3,12,2]){$0>$1 classclass{varnumberOfSides=funcsimpleDescription()->Stringreturn"A with\(numberOfSides)}}使用let添加一个常量属性,再添加一个接收一个参数的方法var= .numberOfSides=var Description= var= .numberOfSides=var Description=classclass{varnumberOfSides:Int=varname:init(name:{=}funcsimpleDescription()->Stringreturn"A with\(numberOfSides)}}注意self(就像numberOfSides)还是通过构造器(就像name)classclassSquare:{varinit(sideLength:Double,name:{self.sideLength=sideLengthsuper.init(name:name)numberOfSides=4}funcarea()->DoublereturnsideLength*}overridefuncsimpleDescription()->}}lettest=Square(sideLength:5.2,name:"mytest 属性可以有getter和setterclassclassEquilateralTriangle:{varsideLength:Double=init(sideLength:Double,name:{self.sideLength=sideLengthsuper.init(name:name)numberOfSides=3}varperimeter:{getreturn3.0*}setsideLength=newValue/}}overridefuncsimpleDescription()->{return"Anequilateraltriaglewithsidesoflength\(sideLength)."}}vartriangle=EquilateralTriangle(sideLength:name:"atriangle")name:"atriangle")triangle.perimeter=9.9在perimetersetter中,新值的名字是newValue。你可以在set注意EquilateralTriangle类的构造器执行了三步设置子类的属性willSet和didSetclassclassTriangleAndSquarevartriangle:{willSetsquare.sideLength=}}varsquare:{willSettriangle.sideLength=}}init(size:Double,name:String)square=Square(sideLength:size,name:name)triangle=EquilateralTriangle(sideLength:size,name:}}vartriangleAndSquare=TriangleAndSquare(size:10,name:"anothertestsh triangleAndSquare.square=Square(sideLength:50,name:"largersquare") classclassCountervarcount:Int=funcincrementBy(amount:Int,numberOfTimestimes:Int){count+=amount*}}varcounter=Counter()counter.incrementBy(2,numberOfTimes:7)letletoptionalSquare:Square?=Square(sideLength:2.5,name:"optionalsquare")letsideLength=enumenumRank:{caseAce=caseTwo,Three,Four,Five,Six,Seven,Nine,Nine,caseJack,Queen,funcsimpleDescription()->{switchself{case.Ace:returncasereturn"jack"case.Queen:return"queen"case.King:return"king"return}}}letace=letaceRawValue=写一个函数,通过比较它们的原始值来比较两个Rank值在上面的例子中,枚举原始值的类型是Int,所以你只需要设置第一个原始值。剩下的原始值会按照顺序赋值。你也可以使用字符串或者浮点数作为枚举的原始值。使用toRaw和fromRaw函数来在原始值和枚举值之间进行转换ififletconvertedRank={letthreeDescription=}enumenumSuitcaseSpades,Hearts,Diamonds,funcfuncsimpleDescription()->{switchself{case.Spades:returncasereturn"hearts"case.Diamonds:return"diamonds"case.Clubs:return}}}lethearts=letheartsDescription=法和构造器。它们之间最大的一个区别就是结构体是传值,类是传引structstructCardvarrank:Rankvarsuit:funcsimpleDescription()->Stringreturn"The\(rank.simpleDescription())of\}}letletthreeOfSpades=Card(rank:.Three,suit:.Spades)letthreeOfSpadesDescription=给Card添加一个方法,创建一副完整的牌并把每张牌的rank和enumServerResponseenumServerResponsecaseResult(String,String)caseError(String)}letsuccess=ServerResponse.Result("6:00am","8:09letfailure=ServerResponse.Error("Outofswitchsuccesscaselet.Result(sunrise,letserverResponse="Sunriseisat\(sunrise)andsunsetisat\(sunset)."caseletletserverResponse="Failure...}给ServerResponse和switch添加第三种情况注意如何从ServerResponse中提取日升和日落时间使用protocol来一个接口protocolprotocolExampleProtocolvarsimpleDescription:String{get}mutatingfuncadjust()}classclassSimpleClass:ExampleProtocolvarsimpleDescription:String="AverysimplevaranotherProperty:Int=69105funcadjust(){simpleDescription+="Now100%}}vara=SimpleClass()letaDescription=structSimpleStructure:ExampleProtocol{varsimpleDescription:String="Asimplemutatingfunc{simpleDescription+="}}varb=SimpleStructure()letbDescription=extension

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论