Swift - 结构

  • 简述

    Swift 4 提供了一个灵活的构建块,可以将构造用作结构。通过使用这些结构一次可以定义构造方法和属性。

    与 C 和 Objective C 不同

    • 结构不需要实现文件和接口。
    • Structure 允许我们创建单个文件并将其接口自动扩展到其他块。
    在 Structure 中,通过返回旧值的副本来复制变量值并将其传递到后续代码中,以便无法更改这些值。

    句法

    
    Structures are defined with a 'Struct' Keyword.
    struct nameStruct {
       Definition 1
       Definition 2
       ---
       Definition N
    }
    
  • 结构的定义

    例如,假设我们必须访问包含三个科目分数的学生记录并找出三个科目的总数。这里 markStruct 用于初始化一个结构,其中三个标记为数据类型“Int”。
    
    struct MarkStruct {
       var mark1: Int
       var mark2: Int
       var mark3: Int
    }
    
  • 访问结构及其属性

    结构的成员通过其结构名称访问。该结构的实例由“let”关键字初始化。
    
    struct studentMarks {
       var mark1 = 100
       var mark2 = 200
       var mark3 = 300
    }
    let marks = studentMarks()
    print("Mark1 is \(marks.mark1)")
    print("Mark2 is \(marks.mark2)")
    print("Mark3 is \(marks.mark3)")
    
    当我们使用playground运行上述程序时,我们得到以下结果 -
    
    Mark1 is 100
    Mark2 is 200
    Mark3 is 300
    
    学生标记通过结构名称“studentMarks”访问。结构成员被初始化为具有整数类型值的 mark1、mark2、mark3。然后将结构 studentMarks() 传递给带有 'let' 关键字的 'marks'。此后“标记”将包含结构成员值。现在通过'.'访问结构成员值来打印值。以其初始化的名称。
    
    struct MarksStruct {
       var mark: Int
       init(mark: Int) {
          self.mark = mark
       }
    }
    var aStruct = MarksStruct(mark: 98)
    var bStruct = aStruct     // aStruct and bStruct are two structs with the same value!
    bStruct.mark = 97
    print(aStruct.mark)      // 98
    print(bStruct.mark)      // 97
    
    当我们使用操场运行上述程序时,我们得到以下结果 -
    
    98
    97
    
  • 结构的最佳使用实践

    Swift 4 语言提供了将结构定义为用于构建功能块的自定义数据类型的功能。结构实例通过其值传递给定义的块以进行进一步操作。

    需要有结构

    • 封装简单的数据值。
    • 通过“值”而不是“引用”复制封装的数据及其相关属性。
    • “复制”和“参考”的结构。
    Swift 4 中的结构通过其成员的值而不是其引用来传递它们的成员。
    
    struct markStruct {
       var mark1: Int
       var mark2: Int
       var mark3: Int
       init(mark1: Int, mark2: Int, mark3: Int) {
          self.mark1 = mark1
          self.mark2 = mark2
          self.mark3 = mark3
       }
    }
    var marks = markStruct(mark1: 98, mark2: 96, mark3:100)
    print(marks.mark1)
    print(marks.mark2)
    print(marks.mark3)
    
    当我们使用操场运行上述程序时,我们得到以下结果 -
    
    98
    96
    100
    

    另一个例子

    
    struct markStruct {
       var mark1: Int
       var mark2: Int
       var mark3: Int
       
       init(mark1: Int, mark2: Int, mark3: Int) {
          self.mark1 = mark1
          self.mark2 = mark2
          self.mark3 = mark3
       }
    }
    var fail = markStruct(mark1: 34, mark2: 42, mark3: 13)
    print(fail.mark1)
    print(fail.mark2)
    print(fail.mark3)
    
    当我们使用操场运行上述程序时,我们得到以下结果 -
    
    34
    42
    13
    
    结构“markStruct”首先用其成员mark1、mark2 和mark3 定义。现在成员类的变量被初始化为保存整数值。然后使用“self”关键字创建结构成员的副本。一旦创建了结构成员的副本,结构块及其参数标记将传递给现在将保存学生标记的“标记”变量。然后将标记打印为 98、96、100。对于相同的结构成员,下一步使用名为“失败”的另一个实例来指向具有不同标记的相同结构成员。然后结果现在打印为 34、42、13。这清楚地解释了结构将拥有成员变量的副本,然后将成员传递给它们即将到来的功能块。