了解 RxSwift,但他们提供的第一个示例未能构建。
我正在尝试从 https://github.com/ReactiveX/RxSwift/blob/master/Documentation/Examples.md 运行 RxSwift 代码
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单视图应用程序,保存,关闭它。
在项目根目录中创建一个 Podfile,其中包含:
# 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 可能会抱怨 bitcode。在项目设置中禁用位码 ->问题解决了。
建。Xcode抱怨combine最新:
Cannot invoke 'combineLatest' ...
Xcode 版本:7.2
容器版本:0.39.0
RxSwift版本:2.1.0
编辑:似乎其他示例也因各种错误而失败,例如:
不能在没有参数的情况下调用"concat">
这可能意味着我的项目配置中缺少某些内容或 RxSwift 发生了巨大变化,没有人有时间更新初学者示例以匹配更改。无论哪种方式,这些都是使用RxSwift的非常令人沮丧的最初几个小时。
Observable.combineLatest 需要 ObservableType(s(,其中 Variable(Int( 是 BehaviorSubject 的包装器。下面我在"a"和"b"上调用了.asObservable((以允许代码工作。
检查控制台输出是否为"3 为正">
let dispose = DisposeBag()
let a /*: Observable<Int>*/ = Variable(1) // a = 1
let b /*: Observable<Int>*/ = Variable(2) // b = 2
let d = a.asObservable()
let e = b.asObservable()
let c = Observable.combineLatest(d, e) {
$0 + $1
}
.filter { $0 >= 0 }
.map { "($0) is positive" }
c.subscribe(
onNext: { i in
print(i)
}
).addDisposableTo(dispose)