Download - Swift School #3
![Page 1: Swift School #3](https://reader034.vdocuments.us/reader034/viewer/2022042815/557eff90d8b42af44a8b4cb8/html5/thumbnails/1.jpg)
Swift Школа
Сергей Пронин Empatika
![Page 2: Swift School #3](https://reader034.vdocuments.us/reader034/viewer/2022042815/557eff90d8b42af44a8b4cb8/html5/thumbnails/2.jpg)
План
• iOS8 - Введение в CloudKit
• Практика CloudKit
• iOS8 - Size Classes
![Page 3: Swift School #3](https://reader034.vdocuments.us/reader034/viewer/2022042815/557eff90d8b42af44a8b4cb8/html5/thumbnails/3.jpg)
CloudKit
![Page 4: Swift School #3](https://reader034.vdocuments.us/reader034/viewer/2022042815/557eff90d8b42af44a8b4cb8/html5/thumbnails/4.jpg)
![Page 5: Swift School #3](https://reader034.vdocuments.us/reader034/viewer/2022042815/557eff90d8b42af44a8b4cb8/html5/thumbnails/5.jpg)
CloudKit
• Обёртка для доступа напрямую к iCloud
• Кроссплатформенная поддержка (iOS / Mac OS)
• Доступ к iCloud аккаунтам
• Структурированные и файловые данные
• Только “транспорт” - не хранение
![Page 6: Swift School #3](https://reader034.vdocuments.us/reader034/viewer/2022042815/557eff90d8b42af44a8b4cb8/html5/thumbnails/6.jpg)
Структуры данных• Контейнер - CKContainer
• База данных - CKDatabase
• Запись - CKRecord
• Зона данных - CKZone
• ID записи - CKRecordID
• Отношения - CKReference
• Неструктурированные данные - CKAsset
![Page 7: Swift School #3](https://reader034.vdocuments.us/reader034/viewer/2022042815/557eff90d8b42af44a8b4cb8/html5/thumbnails/7.jpg)
CKContainer
• Один на приложение
• Инкапсуляция данных (public / private для юзера)
• Можно передавать другим приложениям
• Управляется через админку
![Page 8: Swift School #3](https://reader034.vdocuments.us/reader034/viewer/2022042815/557eff90d8b42af44a8b4cb8/html5/thumbnails/8.jpg)
CKDatabase
![Page 9: Swift School #3](https://reader034.vdocuments.us/reader034/viewer/2022042815/557eff90d8b42af44a8b4cb8/html5/thumbnails/9.jpg)
Public Private
Данные Общие данные Только для юзера
Аккаунт Только для записи Обязательно
Квота Разработчик Пользователи
![Page 10: Swift School #3](https://reader034.vdocuments.us/reader034/viewer/2022042815/557eff90d8b42af44a8b4cb8/html5/thumbnails/10.jpg)
CKRecord
• Структурированные данные
• Пары ключ-значение
• Схема данных формируется на ходу
![Page 11: Swift School #3](https://reader034.vdocuments.us/reader034/viewer/2022042815/557eff90d8b42af44a8b4cb8/html5/thumbnails/11.jpg)
Допустимые типыNSString -> String NSNumber -> Int, Double, Float, Bool NSData NSDate CLLocation CKReference CKAsset NSArray [ * ]
![Page 12: Swift School #3](https://reader034.vdocuments.us/reader034/viewer/2022042815/557eff90d8b42af44a8b4cb8/html5/thumbnails/12.jpg)
CKRecordZone
![Page 13: Swift School #3](https://reader034.vdocuments.us/reader034/viewer/2022042815/557eff90d8b42af44a8b4cb8/html5/thumbnails/13.jpg)
CKRecordIDclass CKRecordID : … { convenience init(recordName: String!) init(recordName: String!, zoneID: CKRecordZoneID!)
var recordName: String! { get } var zoneID: CKRecordZoneID! { get } }
• Можно создать самому либо автоматически
• Полностью нормализованы - содержат информацию о местонахождении записи
![Page 14: Swift School #3](https://reader034.vdocuments.us/reader034/viewer/2022042815/557eff90d8b42af44a8b4cb8/html5/thumbnails/14.jpg)
CKReference
var person = CKRecord(recordType: "Person") var city = CKRecord(recordType: "City")
var reference = CKReference(record: city, action: .None)
person.setObject(reference, forKey: "hometown")
![Page 15: Swift School #3](https://reader034.vdocuments.us/reader034/viewer/2022042815/557eff90d8b42af44a8b4cb8/html5/thumbnails/15.jpg)
CKAsset
• Неструктурированные данные
• У юзера хранятся на диске
• Являются полями CKRecord
![Page 16: Swift School #3](https://reader034.vdocuments.us/reader034/viewer/2022042815/557eff90d8b42af44a8b4cb8/html5/thumbnails/16.jpg)
CKReference
var person = CKRecord(recordType: "Person") var passport = CKAsset(fileURL: passportFileURL)
person["passport"] = passport
![Page 17: Swift School #3](https://reader034.vdocuments.us/reader034/viewer/2022042815/557eff90d8b42af44a8b4cb8/html5/thumbnails/17.jpg)
Практика CloudKit
![Page 18: Swift School #3](https://reader034.vdocuments.us/reader034/viewer/2022042815/557eff90d8b42af44a8b4cb8/html5/thumbnails/18.jpg)
Size Classes
![Page 19: Swift School #3](https://reader034.vdocuments.us/reader034/viewer/2022042815/557eff90d8b42af44a8b4cb8/html5/thumbnails/19.jpg)
Structure
До iOS 8
Device type Interface Orientation Size
iOS 8 и позже
Traits and trait collections Size
![Page 20: Swift School #3](https://reader034.vdocuments.us/reader034/viewer/2022042815/557eff90d8b42af44a8b4cb8/html5/thumbnails/20.jpg)
Trait collectionclass UITraitCollection : NSObject, NSCopying, NSSecureCoding, NSCoding { func containsTraitsInCollection(trait: UITraitCollection!) -> Bool init(traitsFromCollections traitCollections: [AnyObject]!) -> UITraitCollection init(userInterfaceIdiom idiom: UIUserInterfaceIdiom) -> UITraitCollection var userInterfaceIdiom: UIUserInterfaceIdiom { get } init(displayScale scale: CGFloat) -> UITraitCollection var displayScale: CGFloat { get } init(horizontalSizeClass: UIUserInterfaceSizeClass) -> UITraitCollection var horizontalSizeClass: UIUserInterfaceSizeClass { get } init(verticalSizeClass: UIUserInterfaceSizeClass) -> UITraitCollection var verticalSizeClass: UIUserInterfaceSizeClass { get } }
![Page 21: Swift School #3](https://reader034.vdocuments.us/reader034/viewer/2022042815/557eff90d8b42af44a8b4cb8/html5/thumbnails/21.jpg)
HorizontalSizeClass Горизонтальная спецификация
VerticalSizeClass Вертикальная спецификация
UserInterfaceIdiom Тип устройства
DisplayScale Масштаб экрана
![Page 22: Swift School #3](https://reader034.vdocuments.us/reader034/viewer/2022042815/557eff90d8b42af44a8b4cb8/html5/thumbnails/22.jpg)
x-sizeClass Regular
y-sizeClass Regular
idiom Pad
scale 1.0
![Page 23: Swift School #3](https://reader034.vdocuments.us/reader034/viewer/2022042815/557eff90d8b42af44a8b4cb8/html5/thumbnails/23.jpg)
x-sizeClass Regular
y-sizeClass Regular
idiom Pad
scale 1.0
![Page 24: Swift School #3](https://reader034.vdocuments.us/reader034/viewer/2022042815/557eff90d8b42af44a8b4cb8/html5/thumbnails/24.jpg)
x-sizeClass Compact
y-sizeClass Regular
idiom Phone
scale 2.0
![Page 25: Swift School #3](https://reader034.vdocuments.us/reader034/viewer/2022042815/557eff90d8b42af44a8b4cb8/html5/thumbnails/25.jpg)
x-sizeClass Compact
y-sizeClass Compact
idiom Phone
scale 2.0
![Page 26: Swift School #3](https://reader034.vdocuments.us/reader034/viewer/2022042815/557eff90d8b42af44a8b4cb8/html5/thumbnails/26.jpg)
+x-sizeClass Compact
x-sizeClass Regular
y-sizeClass Regular
idiom Pad
scale 1.0
![Page 27: Swift School #3](https://reader034.vdocuments.us/reader034/viewer/2022042815/557eff90d8b42af44a8b4cb8/html5/thumbnails/27.jpg)
x-sizeClass Regular
y-sizeClass Regular
idiom Pad
scale 1.0
+ x-sizeClass Compact
@interface UIViewController <UITraitEnvironment> !
- (void)setOverrideTraitCollection: forChildViewController: !
- (UITraitCollection *)overrideTraitCollectionForChildViewController: !
@end
![Page 28: Swift School #3](https://reader034.vdocuments.us/reader034/viewer/2022042815/557eff90d8b42af44a8b4cb8/html5/thumbnails/28.jpg)
Кто обладает свойством trait collection
1. UIScreen
2. UIWindow
3. UIViewController
4. UIView