More workarounds for Swift compiler bugs.

This commit is contained in:
Krunoslav Zaher 2016-02-13 23:36:01 +01:00
parent b08bf24201
commit 300c44aced
3 changed files with 14 additions and 6 deletions

View File

@ -43,10 +43,17 @@ extension NSControl {
return ControlEvent(events: source)
}
static func rx_value<C: NSControl, T: Equatable>(control: C, getter: (C) -> T, setter: (C, T) -> Void) -> ControlProperty<T> {
/**
You might be wondering why the ugly `as!` casts etc, well, for some reason if
Swift compiler knows C is UIControl type and optimizations are turned on, it will crash.
Can somebody offer poor Swift compiler writers some other better job maybe, this is becoming
ridiculous. So much time wasted ...
*/
static func rx_value<C: AnyObject, T: Equatable>(control: C, getter: (C) -> T, setter: (C, T) -> Void) -> ControlProperty<T> {
MainScheduler.ensureExecutingOnScheduler()
let source = control.rx_lazyInstanceObservable(&rx_value_key) { () -> Observable<T> in
let source = (control as! NSObject).rx_lazyInstanceObservable(&rx_value_key) { () -> Observable<T> in
return Observable.create { [weak weakControl = control] (observer: AnyObserver<T>) in
guard let control = weakControl else {
observer.on(.Completed)
@ -55,7 +62,7 @@ extension NSControl {
observer.on(.Next(getter(control)))
let observer = ControlTarget(control: control) { _ in
let observer = ControlTarget(control: control as! NSControl) { _ in
if let control = weakControl {
observer.on(.Next(getter(control)))
}
@ -64,7 +71,7 @@ extension NSControl {
return observer
}
.distinctUntilChanged()
.takeUntil(control.rx_deallocated)
.takeUntil((control as! NSObject).rx_deallocated)
}
let bindingObserver = UIBindingObserver(UIElement: control, binding: setter)

View File

@ -57,7 +57,7 @@ extension UIControl {
Swift compiler knows C is UIControl type and optimizations are turned on, it will crash.
Can somebody offer poor Swift compiler writers some other better job maybe, this is becoming
rediculous.
ridiculous. So much time wasted ...
*/
static func rx_value<C: AnyObject, T: Equatable>(control: C, getter: (C) -> T, setter: (C, T) -> Void) -> ControlProperty<T> {
let source: Observable<T> = Observable.create { [weak weakControl = control] observer in

View File

@ -1,6 +1,5 @@
#!/bin/bash
set -e
#set -o xtrace
RESET="\033[0m"
BLACK="\033[30m"
@ -134,12 +133,14 @@ function action() {
fi
STATUS=""
set -x
xcodebuild -workspace "${WORKSPACE}" \
-scheme "${SCHEME}" \
-configuration "${CONFIGURATION}" \
-derivedDataPath "${BUILD_DIRECTORY}" \
-destination "$DESTINATION" \
$ACTION | xcpretty -c; STATUS=${PIPESTATUS[0]}
set +x
if [ $STATUS -ne 0 ]; then
echo $STATUS