Types - eldaroid/iOSWiki GitHub Wiki
static
- :heavy_check_mark: Static properties and methods
static - определяет область видимости (т.е. текущую переменную можно увидеть только изнутри этого класса)
class MyClass{
static let typeProperty = "API_KEY"
static var instancesOfMyClass = 0
var price = 9.99
let id = 5
}
let obj = MyClass()
obj.price // 9.99
obj.id // 5
obj.typeProperty // error
MyClass.typeProperty // "API_KEY"
MyClass.instancesOfMyClass // 0
static var
принадлежит самому типу, в то время как var принадлежит экземпляру (конкретному значению определенного типа) класса.
struct Car {
static var numberOfWheels = 4
var plateNumber: String
}
Car.numberOfWheels = 3
let myCar = Car(plateNumber: "123456")
У всех автомобилей одинаковое количество колес. И вы можете изменить количество только у всех типов Car. Чтобы изменить номерной знак, вам нужно иметь экземпляр Car. Например, myCar.
static принадлежит самой структуре, а не экземплярам структуры
обращаться к этой переменной нужно только вызвав саму структуру: {name of struct}.{static var}
Без static ключевого слова нужно было бы создать новый экземпляр структуры только для чтения одной переменной
Если нам никогда не нужно будет создавать экземпляр структуры, то лучше использовать перечисление в таких случаях
переменная static всегда должна иметь дефолтное значение:
static let numberOfWheels
- error: type annotation missing in pattern.static let numberOfWheels: Int
- error: 'static var' declaration requires an initializer expression or getter/setter specifier
Float or Double
- :heavy_check_mark: Types of Data
Cледует использовать официальную рекомендацию Apple, Double
потому что она имеет наивысшую точность.
Any & AnyObject are special types
Эти типы обычно использовались для совместимости со старыми интерфейсами Objective-C API. Переменные типа Any может содержать что-то любого типа (AnyObject содержит только классы). Swift - сильно типизированный язык, поэтому вы не можете вызвать метод на Any. Сначала нужно преобразовать его в конкретный тип.
Downcasting Casting с "as?" не только для "Any & Any0bject". Ты можешь бросить любого типа как? в любой другой тип, который имеет смысл. В основном это будет приведение объекта из одного из его супер-классов в подкласс.
Пример "понижения" из супер-класса в подкласс. let vc: UIViewController = ConcentrationViewController() Тип vc - UIViewController (потому что мы его явно напечатали). И назначение является законным, потому что ConcentrationViewController является UIViewController. Но мы не можем сказать, например, vc.flipCard(…), так как vc набран как UIViewController. Однако, если мы приведем vc в качестве ConcentrationViewController, то мы сможем использовать его .
if let cvc = vc as? ConcentrationViewController {
cvc. flipCard(…) // this is okay
Это называется "Downcasting".
Интересный класс в Foundation - NsObject.
NsObject - это корневой класс всех классов из OBJ-c. Все вещи, такие как UIViewController, все классы UIKit, все те вещи, которые были разработаны в ONj-c мире и совместимы до сих пор с OBj-c. Их корневой класс, вещь, от которой они унаследовали в конце концов на вершине, является NSObject, потому что часть RUNTIME была встроена в этот класс, а не находится в реальном времени выполнения, как это происходит в SWIFT(because some of RUNTIME was built into this class rather than being in the actual runtime like it is in SWIFT).
Вторым интересным классом является NSNumber, в OBJ-c, когда вы передаете числа вокруг, вы на самом деле передаете их с помощью этого класса (ссылочного типа). Так что если вы хотите передать что-то объектно-ориентированным способом, вам нужно передать этот NSNumber. Он представляет собой любой вид чисел: floating point, integer, anything. Это что-то вроде generic number holder, даже boolean. You can it to swift types like this: photo of lecture_NSNumber