官术网_书友最值得收藏!

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
主站蜘蛛池模板: 罗山县| 那坡县| 龙陵县| 绥芬河市| 沾化县| 恩平市| 大英县| 吉水县| 东阿县| 山丹县| 迁安市| 赫章县| 上高县| 拉孜县| 海阳市| 海宁市| 纳雍县| 彭山县| 周至县| 西丰县| 临湘市| 肇东市| 绥芬河市| 岳西县| 阳高县| 理塘县| 东乌珠穆沁旗| 道孚县| 甘肃省| 泊头市| 舒城县| 茶陵县| 无锡市| 太仆寺旗| 吉林省| 封丘县| 舒城县| 临泉县| 凌海市| 叶城县| 安康市|