Статические свойства и методы

Последнее обновление: 01.01.2018

Статические свойства

Кроме свойств, которые относятся к отдельным экземплярам класса, мы можем определять свойства, которые относятся ко всему типу - свойства типа (type properties). В других языках программирования есть аналогичная конструкция в виде статических переменных.

Статические свойства предваряются ключевым словом static:

class Greeting {
    static let english = "hello"
    static let french = "salut"
    static let german = "halo"
}

print(Greeting.english)		// hello

В данном случае константы english, french и german относятся ко всему классу Greeting в целом, поэтому обращение к ним производится по имени класса.

Другой пример: допустим, класс вклада предусматривает конвертацию суммы вклада в доллары. Для хранения ставки доллара по отношению к текущей валюте мы можем определить свойства типа, так как курс доллара не зависит от конкретного вклада:

class Account{

	var capital: Double
	var rate: Double
	
	static var usdRate: Double = 69
	
	init(capital: Double, rate: Double){
	
		self.capital = capital
		self.rate = rate
	}
	
	func convert() -> Double{
		
		return capital / Account.usdRate
	}
}

Важно, что в самом классе мы не можем обратиться к свойству типа просто по имени свойства или через ключевое слово self. Для обращения к свойству типа требуется писать полное название типа: Account.usdRate.

Таким образом, свойство usdRate будет общим для всех объектов Account.

По названию типа мы в дальнейшем в программе сможем получить значение этого свойства или изменить его:

var myAcc: Account = Account(capital: 1000, rate: 0.1)
var capitalInUsd = myAcc.convert()	// 14.4927
Account.usdRate = 65
capitalInUsd = myAcc.convert()	// 15.3846

Методы типа

Кроме свойств типа Swift позволяет определять статические методы или метода типы (type methods). Это такие методы, которые относятся ко всему типу, а не к отдельному экземпляру. Например, определим класс обменника валюты:

class Exchange{
    static var rate = 58.9      // текущий курс доллара
    static func operate(sum: Double) -> Double{     // обмен нац. валюты на доллары
        return sum / rate
    }
}

print(Exchange.operate(sum: 20000))
Exchange.rate = 58.5        //  изменяем обменный курс
print(Exchange.operate(sum: 15000))
print(Exchange.operate(sum: 56000))

Здесь опять же определено свойство типа - константа rate. Поскольку число rate не зависит от экземпляра класса Exchange, оно универсально, так как устанавливается центробанком. И поэтому мы вполне можем сделать это свойство свойством типа.

И кроме того здесь определен метод operate() - метод обмена валюты, который является статическим. Его логика и действие в принципе тоже не зависит от конкретных экземпляров класса Exchange, поэтому он определен с ключевым словом static. В дальнейшем обращение к этим методам будет идти опять же через имя класса:

var z = Exchange.operate(sum: 20000)
Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850