Пытаюсь осмыслить RxSwift, но самый первый пример, который они предоставляют, не работает.
Я пытаюсь запустить код RxSwift с https://github.com/ReactiveX/RxSwift/blob/master/Documentation/Examples.md
let a /*: Observable<Int>*/ = Variable(1) // a = 1
let b /*: Observable<Int>*/ = Variable(2) // b = 2
// This will "bind" rx variable `c` to definition
// if a + b >= 0 {
// c = "\(a + b) is positive"
// }
let c = Observable.combineLatest(a, b) { $0 + $1 } // combines latest values of variables `a` and `b` using `+`
.filter { $0 >= 0 } // if `a + b >= 0` is true, `a + b` is passed to map operator
.map { "\($0) is positive" } // maps `a + b` to "\(a + b) is positive"
Но это не удается с ошибкой:
Cannot invoke 'combineLatest' with an argument list of type '(Variable<Int>, Variable<Int>, (_, _) throws -> _)'
Это ошибка в примере кода или мне что-то не хватает?
Шаги, которые я сделал для воспроизведения:
Создайте новое приложение iOS Single View, сохраните, закройте его.
Создайте подфайл в корне проекта, содержащий:
# Podfile
use_frameworks!
pod 'RxSwift', '~> 2.0'
pod 'RxCocoa', '~> 2.0'
pod 'RxBlocking', '~> 2.0'
pod 'RxTests', '~> 2.0'
Запустите
pod install
Откройте файл xcworkspace
Поместите пример кода в функцию ViewController viewDidLoad:
import UIKit
import RxSwift
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
let a = Variable(1)
let b = Variable(2)
let c = Observable.combineLatest(a, b) { $0 + $1 }
.filter { $0 >= 0 }
.map { "\($0) is positive" }
}
}
Строить. Xcode может пожаловаться, что не может загрузить RxSwift. Перезапустите Xcode -> проблема решена.
Строить. Xcode может пожаловаться на битовый код. Отключить биткод везде в настройках проекта -> проблема решена.
Строить. Xcode жалуется на combLatest:
Cannot invoke 'combineLatest' ...
Версия Xcode: 7.2
версия пода: 0.39.0
Версия RxSwift: 2.1.0
РЕДАКТИРОВАТЬ: Кажется, что другие примеры также терпят неудачу с различными ошибками, такими как:
Невозможно вызвать concat без аргументов
Это, вероятно, означает, что в моей конфигурации проекта чего-то не хватает или RxSwift резко изменился, и ни у кого не было времени обновить примеры для начинающих, чтобы они соответствовали изменениям. В любом случае, первые часы работы с RxSwift были довольно неприятными.