由于str是存储属性,而printHello()是一个类型方法,在此代码中将str用在了printHello()方法中,导致程序出现了以下的错误:
(2)类调用方法
所有的类型方法必须要使用类去调用,而非对象,否则就会出现错误,如以下的代码:
由于在此代码中,方法printHello()是一个实例方法,但是在调用时,使用对象进行了调用,导致程序出现了以下错误:
(3)外部参数名
和实例方法相同,Swift默认给类型方法的第一个参数名称一个局部参数名称;默认同时给第二个和后续的参数名称局部参数名称和外部参数名称。在调用时,一定不要忘记外部参数名。
注意:在Swift1.2语言中允许在类中使用关键字static定义静态方法和属性(所谓静态属性或方法是指在程序运行时,分配的内存会一直存在。直到退出程序,内存才会释放这块空间)。其中,静态属性的定义如下:
static var属性名:数据类型 …
返回一个值
}
或者为
静态方法的定义如下:
以下将使用static关键字在类中声明一个静态属性,其语法形式如下:
运行结果如下所示:
存储属性、局部变量和全局变量的区别
存储属性可以理解为变量的一种。所以随着变量使用地方的不同,可以将变量分为存储属性、局部变量和全局变量。这三种变量的不同如表8-1所示。
表8-1三种变量的不同
注意:这里提到的方法在前面已经讲解过了。
【示例8-17】在以下定义了三个类型的变量分别为str、str1、str2,将它们使用在不同的地方。代码如下:
import Foundation
let str="Hello"
class NewClass {
let str1="Swift"
func printstring(){
let str2="World"
print(str)
print(str1)
print(str2)
}
}
let newclass=NewClass()
newclass.printstring()
在此代码中提到的方法会在以一节中讲解。运行结果如下所示:
注意:在使用存储属性、局部变量、和全局变量时一定要注意它们的作用域,所谓作用域就是指这些变量的有效范围,图8.5就是以上代码中变量的有效范围。
图8.5作用域
如果一个变量超出了它的有效范围,程序就会出现错误,如以下的代码:
import Foundation
let str="Hello"
class NewClass {
let str1="Swift"
func printstring(){
let str2="World"
print(str)
print(str1)
print(str2)
}
func printstr(){
print(str)
print(str1)
print(str2)
}
}
let newclass=NewClass()
newclass.printstring()
在此代码中str2是一个定义在printstring()方法中的局部变量,所以它的有效范围就是在此方法中。但是在此方法之外使用会出现错误,在此代码中将str2又使用在了方法printstr()中。导致程序出现了以下的出现:
局部变量和存储属性同名的解决方法——self属性
在一个类中,方法中的局部变量可能和存储属性同名,这是,不可以直接使用相同的名称去访问存储属性,为了解决这一问题,Swift引入了一个self属性。如以下代码,此代码的功能是使用self对存储属性进行访问。代码如下:
import Foundation
class NewClass{
var count:Int=100
func printcount(){
let count:Int=50
print(count)
print(self.count)
}
}
let newClass=NewClass()
newClass.printcount()
count表示的是局部变量的值50,self.count表示存储属性的值100。运行结果如下所示:
本文选自:Swift2.0语言快速入门v3.0大学霸内部资料,转载请注明出处,尊重技术尊重IT人!
(编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!