Александр рассказал про использование паттерна MVVM в языке Swift. Были рассмотрены его отличия от MVC, что можно использовать уникального из Swift. И напоследок было продемонстрировано небольшое демо.
3. • Про работу с базовыми инструментами
(UICollectionView, Swift и прочие) - 26%
• Про подходы к разработке крупных проектов (MVVM,
CI и прочие) - 37%
13. MVC
struct Person {
var firstName: String
var secondName: String
}s
class ViewController: UIViewController {
var person: Person!
@IBOutlet var nameLabel: UILabel!
}s
14. MVC
struct Person {
var firstName: String
var secondName: String
}s
class ViewController: UIViewController {
var person: Person!
@IBOutlet var nameLabel: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
nameLabel.text = "(person.firstName) (person.secondName)"
}
}s
15. MVVM
struct Person {
var firstName: String
var secondName: String
}s
struct PersonModel {
var person: Person
var name: String {
return "(person.firstName) (person.secondName)"
}
}
class ViewController: UIViewController {
var person: Person!
@IBOutlet var nameLabel: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
nameLabel.text = "(person.firstName) (person.secondName)"
}
}s
16. MVVM
struct Person {
var firstName: String
var secondName: String
}s
struct PersonModel {
var person: Person
var name: String {
return "(person.firstName) (person.secondName)"
}
}
class ViewController: UIViewController {
var personModel: PersonModel!
@IBOutlet var nameLabel: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
nameLabel.text = personModel.name
}
}s
23. MVVM
RxSwift
var name = Variable("Value")
let subscribe = name.asObservable().subscribeNext { (value) in
print(value)
}s
24. MVVM
RxSwift
var name = Variable("Value")
let subscribe = name.asObservable().subscribeNext { (value) in
print(value)
}s
name.value = "New Value"
subscribe.dispose()
name.value = "Another Value"
Value
New Value
30. Swift
Не Objective-C
• Вы что-то делаете не так если:
• Наследуете NSObject
• Частое используете class
• Слово protocol и Delegate всегда на одной строчке
• Последний раз видели T в C#
34. Swift
Не Objective-C
• В какую сторону смотреть
• POP (Protocol-Oriented Programming)
• Protocols, Value Type
• Functional reactive programming
• Generic
• State machine
• Enums
38. protocol ColletionItem {
var id: String { get }
var name: String { get }
}s
struct SongItem: ColletionItem {
let id: String
private(set) var name: String
// ...
init(id: String, name: String) {
self.id = id
self.name = name
}
}
Swift
POP в Swift
39. protocol ColletionItem {
var id: String { get }
var name: String { get }
}s
extension ColletionItem {
var title: String {
if name.characters.count > 0 {
return name
}
return "Uncnown"
}
}
Swift
POP в Swift
51. • https://medium.com/ios-os-x-development/ios-architecture-
patterns-ecba4c38de52 - Паттерны в iOS
• http://artsy.github.io/blog/2015/09/24/mvvm-in-swift/ -
Проблемы MVVM в Swift
• https://www.captechconsulting.com/blogs/ios-9-tutorial-
series-protocol-oriented-programming-with-uikit - Хороший
пример использования POP
• https://github.com/ReactKit/SwiftState - Машина состояний
в Swift
Полезные ссылки