Swift结构
时间:2020-02-23 14:44:04 来源:igfitidea点击:
在本教程中,我们将讨论Swift中的一个重要构建模块,即Structures。
Swift struct关键字用于在Swift编程中创建结构。
Swift结构
在较高的层次上,结构是自定义数据类型,可让我们以属性和函数的形式存储数据。
结构的亮点之一是它们是值类型而不是引用类型。
让我们看一下struct的基本语法。
struct Name { //properties here }
使用关键字" struct"定义结构,后跟名称和花括号。
属性是在struct
中定义的普通变量/常量。
我们将在以后的教程中深入研究"属性"。
与其他语言不同,Swift中的Struct具有完整功能。
它们允许属性,函数,初始化程序,协议等。
与类不同,Swift中的结构不支持继承。
Swift结构示例
这是带有属性的Struct定义的示例。
struct Rectangle { var width = 0 var height = 0 }
上面的" struct"的一个实例可以通过以下方式创建。
var rectangle = Rectangle()
要访问或者修改结构的属性,我们在实例上使用点运算符,如下所示。
print(rectangle.width) //prints 0 print(rectangle.height) //prints 0 rectangle.width = 10 rectangle.height = 10
如果实例初始化为let
,则无法更改属性。
let rectangle = Rectangle() rectangle.width = 10 //compile-time error rectangle.height = 10 //compile-time error
在结构内部定义功能
struct Rectangle { var width = 0 var height = 0 func area(width :Int, height: Int) -> String { return "Area is \(width*height)" } }
使用结构实例调用函数,如下所示:
var rectangle = Rectangle() rectangle.width = 10 rectangle.height = 10 rectangle.area(width: rectangle.width, height: rectangle.height) //prints 100
在函数内部修改结构属性
要在函数内部修改属性,我们需要使用关键字mutating标记该函数。
struct Rectangle { var width = 0 var height = 0 mutating func printModifiedWidth() -> String { width = width*2 return "Modified width is \(width)" } } var rectangle = Rectangle() rectangle.width = 10 rectangle.printModifiedWidth() //prints "Modified width is 20"
注意:结构内的属性无法在简单函数内更改。
将函数声明为struct内部的变量使我们能够更改Structures中的属性。
Swift结构初始化器
默认的初始化程序有2种形式。
一个空的initializer()或者一个成员初始化器,它在其括号内列出该结构的属性,以便您可以为其分配新的值。
上述结构的成员初始化器如下所示:
var rectangle = Rectangle(width: 10, height: 10)
可以将自定义初始化程序定义如下:
struct Rectangle { var width = 0 var height = 0 init(width: Int, height: Int) { self.width = width*2 self.height = height*2 } } var rectangle = Rectangle(width: 10, height: 10) print(rectangle.width) //prints 20 print(rectangle.height) //prints 20
初始化程序委派也可以如下所示。
struct Rectangle { var width = 0 var height = 0 init(width: Int, height: Int) { self.width = width self.height = height } init(width: Int) { self.init(width: width, height: width) } } var square = Rectangle(width: 10) print(square.width) //prints 10 print(square.height) //prints 10
Swift结构静态函数
可以在不创建Structure实例的情况下调用静态函数,如下所示:
struct Rectangle { var width = 0 var height = 0 static func printString() -> String { return "Hello how you're doing" } } Rectangle.printString() //prints "Hello how you're doing"
Swift Struct计算属性
可以使用以下语法动态计算属性。
struct Rectangle { var width = 0 var height = 0 var area: Int { get { return width*height } set { area = 0 } } }
set用来给属性赋一个初始值。
get是实际返回计算属性的函数。
使用计算出的属性,当" width"或者" height"被更改时," area"属性将被自动计算。
var rectangle = Rectangle() print(rectangle.area) //prints 0 rectangle.width = 20 rectangle.height = 20 print(rectangle.area) //prints 400
Swift结构是通过值而不是通过引用传递的
struct Rectangle { var width = 0 var height = 0 var area: Int { get { return width*height } set { area = 0 } } } var rectangle = Rectangle() print(rectangle.area) rectangle.width = 20 rectangle.height = 20 var rect = rectangle rect.width = 30 print(rectangle.width) //prints 20 and NOT 30