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

