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

The differences between variables and constants

Probably, the most often used feature in all programming languages is creating and storing a value. We create local variables in functions and declare them in classes and other data structures; that's why it's very important to do it properly.

In Swift, there are two ways of creating and storing a value, as follows:

  • Making it a variable:
    var name = "Sara"
  • Making it a constant:
    let name = "Sara"

The difference between variables and constants is that a constant value can be assigned only once and can't be changed after that. A variable value, on the other hand, can be changed anytime. Here's an example:

var name = "Sam"
name = "Jon"

let lastName = "Peterson"
lastName = "Jakson" //Error, can't change constant after assigning

Tip

The golden rule is to always declare your type as a constant (the let keyword in the previous example) first. Change it to a variable (the var keyword) only if you need it afterwards.

There are some exceptions when you can't declare it as a constant, for example, when making @IBOutles or weak. Also, optional values must be declared as variables.

Using constants has many benefits over using variables. A constant is an immutable type, and we will cover all the benefits of immutability later. The two most important benefits are as follows:

  • Safety (protection from unexpected value changes)
  • Better performance

You should use constants both when declaring properties and as local constants in functions. We should apply this rule and change our Person and JournalEntry classes as follows:

class Person {
  let name: String
  let lastName: String
...
}

class JournalEntry {
  let title: String
  let text: String
  let date: NSDate
...
}

Usually, you will find yourself using constants more often than variables. Let's look at an example where you could think about using a variable but, in fact, a constant would be a better solution. Let's say you have created a new person in the application and now you want to display a full name with a gender prefix:

let person = Person(firstName: "Jon", lastName: "Bosh")
let man = true

var fullName: String
if man {
  fullName = "Mr "
} else {
  fullName = "Mrs "
}

fullName += person.firstName
fullName += " "
fullName += person.lastName

If you think a bit more about the problem, you will realize that fullName of the person should be immutable; it's not going to change, and it should be declared as a constant:

let person = Person(firstName: "Jon", lastName: "Bosh")
let man = true

let gender: String = man ? "Mr": "Mrs"
let fullName = "\(gender) \(person.firstName) \(person.lastName)"
主站蜘蛛池模板: 和平区| 灵山县| 革吉县| 勃利县| 大方县| 泗水县| 陇川县| 吉木乃县| 鹰潭市| 田林县| 麻江县| 吉林市| 多伦县| 西乌珠穆沁旗| 大荔县| 大城县| 二手房| 尖扎县| 会东县| 英山县| 河曲县| 武功县| 闻喜县| 呼图壁县| 靖西县| 河间市| 普安县| 益阳市| 全椒县| 佛坪县| 龙南县| 庆阳市| 上蔡县| 大连市| 双流县| 栾城县| 六枝特区| 逊克县| 兴隆县| 登封市| 泽普县|