试图围绕 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 Single View Application,保存,关闭它。
在项目根目录中创建一个 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 抱怨 combineLatest:
Cannot invoke 'combineLatest' ...
Xcode 版本:7.2
吊舱版本:0.39.0
RxSwift 版本:2.1.0
编辑:似乎其他示例也因各种错误而失败,例如:
不能在没有参数的情况下调用“concat”
这可能意味着我的项目配置中缺少某些内容,或者 RxSwift 发生了巨大变化,没有人有时间更新初学者示例以匹配更改。无论哪种方式,在使用 RxSwift 的第一个小时里,这些都是非常令人沮丧的。