- Swift 4 Programming Cookbook
- Keith Moon
- 258字
- 2021-07-08 10:21:26
How it works...
Defining a struct is very similar to defining an object class, and that is intentional. Much of the functionality available to a class is also available to a struct.
Within the PersonName struct, we have properties for the three components of the name and the fullName method we saw earlier to combine the three name components into a full name string.
Next, we have a method to change the family name property, which is why we defined the familyName property as a var variable instead of a let constant. This method assigns a new value to a property of the struct; it is mutating, or changing, the struct, and therefore needs to be marked with the mutating keyword. This keyword is enforced by the compiler to remind us that when we mutate a struct, a new copy of the original struct is created with the new value. This is known as value-type semantics.
To see this in action, consider the following code:
let alissasBirthName = PersonName(givenName: "Alissa", middleName: "May", familyName: "Jones")
print(alissasName.fullName()) // Alissa May Jones
var alissasCurrentName = alissasBirthName
print(alissasName.fullName()) // Alissa May Jones
So far, so good. We have created a PersonName struct and assigned it to a constant called alissasBirthName and a variable called alissasCurrentName.
When we change or "mutate" the alissasCurrentName variable, only this variable is changed; alissasBirthName is a copy, and so it doesn't have the amended family name, even though they were assigned from the same source:
alissasCurrentName.change(familyName: "Moon")
print(alissasBirthName.fullName()) // Alissa May Jones
print(alissasCurrentName.fullName()) // Alissa May Moon
- TypeScript Blueprints
- 區塊鏈:以太坊DApp開發實戰
- Learning Neo4j 3.x(Second Edition)
- 零基礎學Java(第4版)
- Java程序設計:原理與范例
- Visual FoxPro程序設計
- OpenStack Orchestration
- Mastering Embedded Linux Programming
- 你必須知道的.NET(第2版)
- 輕松學Scratch 3.0 少兒編程(全彩)
- A/B 測試:創新始于試驗
- TensorFlow程序設計
- C語言從入門到精通(第4版)
- iOS Application Development with OpenCV 3
- Practical C Programming