@property/@synthesize эквивалент в быстрых
Мы использовали объявление property
для передачи данных между классами следующим образом:
.h file (interface file)
@property (nonatomic) double topSpeed;
.m file (implementation file)
@synthesize topSpeed;
Теперь нет класса interface
, как передавать данные между .swift
классами?
Ответы
Ответ 1
Swift не обеспечивает дифференциации свойств и переменных экземпляра (т.е. основного хранилища для свойства). Чтобы определить свойство, вы просто объявляете переменную в контексте класса.
Быстрый класс - это просто файл ClassName.swift.
Вы объявляете класс и свойства как
class SomeClass {
var topSpeed: Double
var aStrProperty: String
var anIntProperty: Int
//Initializers and other functions
}
Вы получаете доступ к значениям свойств через точечную нотацию. Начиная с Xcode6 beta 4, в Swift также есть модификаторы доступа (public
, internal
и private
). По умолчанию каждое свойство internal
. Подробнее см. здесь.
Для получения дополнительной информации см. Руководство по быстрому программированию:
Сохраненные свойства и переменные экземпляра
Если у вас есть опыт работы с Objective-C, вы можете знать, что он предоставляет два способа хранения значений и ссылок как часть экземпляра класса. В дополнение к свойствам вы можете использовать переменные экземпляра в качестве поддержки хранить значения, хранящиеся в свойстве.
Swift объединяет эти понятия в одно объявление свойства. Свойство Swift не имеет соответствующей переменной экземпляра и к хранилищу поддержки для объекта напрямую не обращаются. Эта подход позволяет избежать путаницы в отношении того, как доступ к значению осуществляется в разных контекстов и упрощает объявление свойств в единый, окончательное утверждение. Вся информация о собственности, включая ее имя, тип и характеристики управления памятью - определяется в одно место как часть определения типов.
Ответ 2
Использование свойств.
В Руководство по быстрому программированию:
Сохраненные свойства и переменные экземпляра
Если у вас есть опыт работы с Objective-C, вы можете знать, что он предоставляет два способа хранения значений и ссылок как часть экземпляра класса. В дополнение к свойствам вы можете использовать переменные экземпляра в качестве поддержки хранить значения, хранящиеся в свойстве.
Swift объединяет эти понятия в одно объявление свойства. Свойство Swift не имеет соответствующей переменной экземпляра и к хранилищу поддержки для объекта напрямую не обращаются. Эта подход позволяет избежать путаницы в отношении того, как доступ к значению осуществляется в разных контекстов и упрощает объявление свойств в единый, окончательное утверждение. Вся информация о собственности, включая ее имя, тип и характеристики управления памятью - определяется в одно место как часть определения типов.
Ответ 3
Свойства в Objective-C соответствуют свойствам в Swift. Существует два способа реализации свойств в Objective-C и Swift:
- Синтезированные/автосинтезированные свойства в Objective C - они называются "хранимыми свойствами" в Swift. Вы просто объявляете его с помощью
var topSpeed : Double
или let topSpeed : Double = 4.2
в объявлении класса, точно так же, как вы объявляете локальную переменную в теле функции. Вы не можете указать имя переменной экземпляра резервной копии, потому что, в настоящее время нет переменных экземпляра в Swift. Вы всегда должны использовать свойство вместо переменной экземпляра backing.
- Введенные вручную свойства в Objective-C - они называются "вычисленными свойствами" в Swift. Вы объявляете их в объявлении класса, например
var topSpeed : Double { get { getter code here } set { setter code here } }
(для свойств readwrite
), или var topSpeed : Double { getter code here }
(для свойств readonly
).
Ответ 4
Похоже, что хотя бы часть вашего вопроса связана с передачей данного интерфейса класса другим классам. Подобно Java (и в отличие от C, С++ и Objective-C), Swift не отделяет интерфейс от реализации. Вы не import
заголовочный файл, если хотите использовать символы, определенные где-то в другом месте. Вместо этого вы import
модуль, например:
import Foundation
import MyClass
Чтобы получить доступ к свойствам в другом классе, импортируйте этот класс.
Ответ 5
Сохраненные свойства и переменные экземпляра
Если у вас есть опыт работы с Objective-C, вы можете знать, что он предоставляет два способа хранения значений и ссылок как часть экземпляра класса. В дополнение к свойствам вы можете использовать переменные экземпляра в качестве хранилища резервных копий для значений, хранящихся в свойстве.
Swift объединяет эти понятия в одно объявление свойства. Свойство Swift не имеет соответствующей переменной экземпляра, и к хранилищу резервных копий для свойства напрямую не обращаются. Такой подход позволяет избежать путаницы в отношении того, как значение обращается в разных контекстах, и упрощает объявление свойств в единое, окончательное утверждение. Вся информация о свойстве, включая его имя, тип и характеристики управления памятью, определяется в одном месте как часть определения типов.
Из книги быстрого программирования:
struct FixedLengthRange {
var firstValue: Int
let length: Int
}
var rangeOfThreeItems = FixedLengthRange(firstValue: 0, length: 3)