Swift语言self属性存储属性局部变量和全局变量的区别Swift语言入门很简单大学霸

Swift语言存储属性局部变量和全局变量的区别Swift语言入门很简单大学霸

8.3.3  存储属性、局部变量和全局变量的区别存储属性可以理解为变量的一种Swift语言存储属性局部变量和全局变量的区别Swift语言入门很简单大学霸。所以随着变量使用地方的不同,可以将变量分为存储属性、局部变量和全局变量。这三种变量的不同如表8-1所示。

表8-1  三种变量的不同

变量名称 定义范围
存储属性 定义在类中
局部变量 函数、方法或闭包内部
全局变量 函数、方法、闭包或任何类型之外定义的变量

Swift语言存储属性局部变量和全局变量的区别Swift语言入门很简单大学霸注意:这里提到的方法在前面已经讲解过了。

【示例8-17】在以下定义了三个类型的变量分别为str、str1、str2,将它们使用在不同的地方。代码如下Swift语言存储属性局部变量和全局变量的区别Swift语言入门很简单大学霸:

import Foundation

let str=”Hello”

class NewClass {

  let str1=”Swift”

func printstring(){

 let str2=”World”

println(str)

println(str1)

println(str2)

}

}

let newclass=NewClass()

newclass.printstring()

Swift语言存储属性局部变量和全局变量的区别Swift语言入门很简单大学霸在此代码中提到的方法会在以一节中讲解。运行结果如下所示:

Hello

Swift

World

Program ended with exit code: 0

注意:在使用存储属性、局部变量、和全局变量时一定要注意它们的作用域,所谓作用域就是指这些变量的有效范围,图8.5就是以上代码中变量的有效范围。

Swift语言存储属性局部变量和全局变量的区别Swift语言入门很简单大学霸图8.5  作用域

如果一个变量超出了它的有效范围,程序就会出现错误,如以下的代码:

import Foundation

let str=”Hello”

class NewClass {

let str1=”Swift”

func printstring(){

let str2=”World”

println(str)

println(str1)

println(str2)

}

func printstr(){

println(str)

println(str1)

println(str2)

}

}

let newclass=NewClass()

newclass.printstring()

在此代码中str2是一个定义在printstring()方法中的局部变量,所以它的有效范围就是在此方法中。但是在此方法之外使用会出现错误,在此代码中将str2又使用在了方法printstr()中。导致程序出现了以下的出现:

Use of unresolved identifier ‘str2’

8.3.4  局部变量和存储属性同名的解决方法——self属性Swift语言self属性存储属性局部变量和全局变量的区别Swift语言入门很简单大学霸

在一个类中,方法中的局部变量可能和存储属性同名,这是,不可以直接使用相同的名称去访问存储属性,为了解决这一问题,Swift引入了一个self属性。如以下代码,此代码的功能是使用self对存储属性进行访问。代码如下:

import Foundation

class NewClass{

var count:Int=100

func printcount(){

var count:Int=50

println(count)

 println(self.count)

}

}

let newClass=NewClass()

newClass.printcount()

count表示的是局部变量的值50,self.count表示存储属性的值100。运行结果如下所示:

50

100

Program ended with exit code: 0

Swift语言存储属性局部变量和全局变量的区别Swift语言入门很简单大学霸

Comments are closed.