初探swift语言的学习笔记七(swift 的关健词)

初探swift语言的学习笔记七(swift 的关健词),第1张

概述作者:fengsh998 原文地址:http://blog.csdn.net/fengsh998/article/details/32133809 转载请注明出处 如果觉得文章对你有所帮助,请通过留言或关注微信公众帐号fengsh998来支持我,谢谢! 每一种语言都有相应的关键词,每个关键词都有他独特的作用,来看看swfit中的关键词:     关键词: 用来声明的: “ class, deini 作者:fengsh998 原文地址:http://blog.csdn.net/fengsh998/article/details/32133809 转载请注明出处 如果觉得文章对你有所帮助,请通过留言或关注微信公众帐号fengsh998来支持我,谢谢!


每一种语言都有相应的关键词,每个关键词都有他独特的作用,来看看swfit中的关键词:

关键词:

用来声明的:

“ class,deinit,enum,extension,func,import,init,let,protocol,static,struct,subscript,typealias,var.”

用于子句的:

“ break,case,continue,default,do,else,fallthrough,if,in,for,return,switch,where,while.”

表达式和类型的:

“ as,dynamicType,is,new,super,self,__ColUMN__,__file__,__FUNCTION__,__liNE__”

//特殊语境使用的:

“dIDSet,get,inout,mutating,overrIDe,set,uNowned,uNowned(safe),uNowned(unsafe),weak,willSet”


class

用来定义一个类,相信大家并不陌生。

如果定义一个汽车类

[cpp] view plain copy classCar { init() //todoinitsomething. } }

init

相对于类的构造方法的修饰。


deinit

相对于类的释构方法的修饰。

对于类的构造和释构在swift 中需要使用关键词来修饰,而很多高级语言并不需要特别的指定,便C++ 只需要类名与构造函数名相同就可以,不需要额外的关键词。


enum

枚举类型的声明,这个与很多语方都相通。


extension

扩展,有点像oc中的categorIEs 。

Swift 中的可以扩展以下几个:
添加计算型属性和计算静态属性
定义实例方法和类型方法
提供新的构造器
定义下标
定义和使用新的嵌套类型
使一个已有类型符合某个接口


如下面扩展字符串:

extensionString{ struct_Dummy{ varIDxVal:Int var_padding:Int var_padding2:Int var_padding3:Int } //过虑出数字 funcfitlerCharater()->String varnumberstr:String="" forcharacterinself { lets:String=String(character) //println(s.toInt()) ifleths=s.toInt() numberstr+=character returnnumberstr //扩展使用下标访问 subscript(i:Int)->Character{ vardummy:_Dummy=reinterpretCast(i>=0?self.startIndex:self.endindex) dummy.IDxVal+=i letIDx:String.Index=reinterpretCast(dummy) returnself[IDx] //扩展使用Range访问 subscript(subRange:Range<Int>)->String{ varstart:_Dummy=reinterpretCast(self.startIndex) varend=start start.IDxVal=subRange._startIndex end.IDxVal=subRange._endindex letstartIndex:String.Index=reinterpretCast(start) letendindex:String.Index=reinterpretCast(end) returnself[startIndex..endindex] }
测试:

functestExtension() varstr:String="1234ab5国6cd7中8i90" println(str.fitlerCharater()) letchina:String="chinaoperatingsystempublicto世界" println("使用下标索引访问第13个字符\(china[13])") println("使用负号下标即变为从右往左访问字符\(china[-1])") println("使用负号下标即变为从右往左访问字符\(china[-2])") println("使用下标Range来访问范围\(china[2...6])") dump(china[1..5],name:"china[1:4]")//使用dump输出 dump(china[10...13],name:"china[10:13]") }
输出:

1234567890 使用下标索引访问第13个字符n 使用负号下标即变为从右往左访问字符界 使用负号下标即变为从右往左访问字符世 使用下标Range来访问范围inao -china[1:4]:hina -china[10:13]:atin
func

用来修饰函数的关键词。

import

导入头文件,相信大家都不陌生,但在swift 中好像被用来导入包,如import UIKit。 因为swift中没有了头文件的概念。

let

用来修改某一常量的关键词。像const 限定差不多

var

用来声明变量。

protocol

协议,也有称为接口,这个往往在很多高级语言中不能多重继承的情况下使用协议是一个比较好的多态方式。

static

用来修饰变量或函数为静态

struct

用来修饰结构体。

subscript

下标修饰,可以使类(class),结构体(struct),枚举(enum) 使用下标访问。

classGarage varproducts:String[]=Array() subscript(index:Int)->String get returnproducts[index] set ifindex<products.count//&&!products.isEmpty products[index]=newValue else products.append(newValue) functestSubscript() vargarage=Garage() garage[0]="A" garage[1]="B" garage[2]="C" garage[3]="D" garage[2]="CC" println("index1=\(garage[0]),index2=\(garage[1]),index3=\(garage[2]),index4=\(garage[3])") }
输出

index1=A,index2=B,index3=CC,index4=D

typealias

类型别名,就像typedef一样。借typedef unsigned long int UInt64

同样在swift中也可能自定义类型。


break

跳出循环,通常用于for,while,do-while,switch

case

case相信大家并不陌生,常在switch中使用,但如今在swift中多了一个地方使用哪就是枚举类型。

continue

跳过本次循环,继续往后执行。

default

缺省声明。常见在switch中。

do,while

这几个就不用多说了,越说越混。

in

范围或集合 *** 作

letstr="123456" forcinstr println(c) }

fallthrough

由于swift中的switch语句中可以省去了break的写法,但在其它语言中省去break里,会继续往后一个case跑,直到碰到break或default才完成。在这里fallthrough就如同其它语言中忘记写break一样的功效。

letintegerToDescribe=1 vardescription="Thenumber\(integerToDescribe)is" switchintegerToDescribe{ case1,3,5,7,11,13,17,19: description+="aprimenumber,andalso"; fallthrough case5: description+="aninteger" default: description+="finished" println(description)
输出:

Thenumber1isaprimenumber,andalsoaninteger

where

swift中引入了where 来进行条件判断。

letyetAnotherPoint=(1,-1) switchyetAnotherPoint{ caselet(x,y)wherex==y: println("(\(x),\(y))isonthelinex==y") ) ) }
当switch的条件满足where 后面的条件时,才执行语句。

is

as

is 常用于对某变量类型的判断,就像OC中 isKindClass ,as 就有点像强制类型转换的意思了。

forvIEw:AnyObjectinself.vIEw.subvIEws ifvIEwisUIbutton letbtn=vIEwasUIbutton; println(btn) }
OC的写法:

for(UIVIEw*vIEwinself.vIEw.subvIEws) if([vIEwisKindOfClass:[UIbuttonclass]])//is *** 作 UIbutton*btn=(UIbutton*)vIEw//as *** 作 }

super

基类的关键语,通常称父类

__ColUMN__,__liNE__

是不是有点像宏定义啊。

println(__ColUMN__,__liNE__)
输出:

(17,/Users/apple/Desktop/swiftDemo/swiftDemo/VIEwController.swift,vIEwDIDLoad(),62)
set,get

常用于类属性的setter getter *** 作。

willSet,dIDSet

在swift中对set *** 作进行了扩展,willset 在set新值成功前发生,dIDset在设置新值成功后发生。

inout

对函数参数作为输出参数进行修饰。

funcswapTwoInts(inouta:Int,inoutb:Int){ lettemporaryA=a a=b b=temporaryA }

mutating

具体不是很理解,好像是专为结构体使用而设置的变体声明

protocolExampleProtocol{ varsimpleDescription:String{get} mutatingfuncadjust() classSimpleClass:ExampleProtocol{ varsimpleDescription:String="Averysimpleclass." funcadjust(){ simpleDescription+="Now100%adjusted." structSimpleStructure:ExampleProtocol{ varsimpleDescription:String="Asimplestructure" mutatingfuncadjust(){//如果去除mutating报Couldnotfindanoverloadfor'+='thatacceptsthesupplIEdarguments simpleDescription+="(adjusted)" } 测试
functestMutating() vara=SimpleClass() a.adjust() letaDescription=a.simpleDescription println(aDescription) varb=SimpleStructure() b.adjust() letbDescription=b.simpleDescription println(bDescription) } overrIDe
父子类之间的函数重写,即复盖。

uNowned,uNowned(unsafe)

无宿主引用。

[uNowned self] 或[uNowned(safe) self] 或[uNowned(unsafe) self]


weak

弱引用,使得对象不会被持续占有

总结

以上是内存溢出为你收集整理的初探swift语言的学习笔记七(swift 的关健词)全部内容,希望文章能够帮你解决初探swift语言的学习笔记七(swift 的关健词)所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1084790.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-27
下一篇 2022-05-27

发表评论

登录后才能评论

评论列表(0条)

保存