详解Swift编程中的方法与属性的概念
方法
在Swift中特定类型的相关联功能被称为方法。在ObjectiveC中类是用来定义方法,其中作为Swift语言为用户提供了灵活性,类,结构和枚举中可以定义使用方法。
实例方法
在Swift语言,类,结构和枚举实例通过实例方法访问。
- 实例方法提供的功能
- 访问和修改实例属性
- 函数关联实例的需要
实例方法可以写在花括号{}内。它隐含的访问方法和类实例的属性。当该类型指定具体实例它调用获得访问该特定实例。
语法
funcfuncname(Parameters)->returntype {Statement1Statement2---StatementN returnparameters }
示例
classcalculations{leta:Intletb:Intletres:Int init(a:Int,b:Int){self.a=a self.b=b res=a+b } functot(c:Int)->Int{returnres-c } funcresult(){ println("Resultis:\(tot(20))") println("Resultis:\(tot(50))")}}letpri=calculations(a:600,b:300) pri.result()
当我们使用playground运行上面的程序,得到以下结果
Resultis:880 Resultis:850
Calculations类定义了两个实例方法:
init()被定义为两个数a和b相加,并将其结果存储在'res'
tot()用于通过从“res”值减去'c'
最后,调用打印的计算a和b的值方法.实例方法以"."语法访问
局部和外部参数名称
Swift函数描述了局部和全局变量声明。同样,Swift方法的命名规则也类似ObjectiveC。但是局部和全局参数名称声明的特性对于函数和方法不同。swift第一个参数是由介词名称'with','for'和'by'访问命名规则。
Swift提供声明作为局数参数名称,其它参数名称为全局参数名,第一参数是方法名称。在这里,“no1”方法作为局部参数名来声明。'no2'用于全局声明,并通过该程序访问。
classdivision{varcount:Int=0 funcincrementBy(no1:Int,no2:Int){ count=no1/no2 println(count)}}letcounter=division() counter.incrementBy(1800,no2:3) counter.incrementBy(1600,no2:5) counter.incrementBy(11000,no2:3)
当我们使用playground运行上面的程序,得到以下结果
600 320 3666
外部参数名称使用#和_符号
尽管Swift方法提供第一个参数名称作为局部声明,用户必须提供以修改参数名称从局部到全局声明。这可以通过'#'符号前缀使用第一参数名来完成。通过这样做,第一参数可以作为全局在整个模块访问。
当用户需要使用外部名称访问在后面的参数名中,方法的名字使用“_”符号覆盖。
classmultiplication{varcount:Int=0 funcincrementBy(#no1:Int,no2:Int){ count=no1*no2 println(count)}}letcounter=multiplication() counter.incrementBy(no1:800,no2:3) counter.incrementBy(no1:100,no2:5) counter.incrementBy(no1:15000,no2:3)
当我们使用playground运行上面的程序,得到以下结果
2400 500 45000
在方法中的Self属性
方法有一个隐式属性被称为“self”,所有定义的类型实例所都有。“self”属性被用于表示当前的实例定义的方法。
classcalculations{leta:Intletb:Intletres:Int init(a:Int,b:Int){self.a=a self.b=b res=a+b println("InsideSelfBlock:\(res)")} functot(c:Int)->Int{returnres-c } funcresult(){ println("Resultis:\(tot(20))") println("Resultis:\(tot(50))")}}letpri=calculations(a:600,b:300)letsum=calculations(a:1200,b:300)
pri.result() sum.result()