将可观察的属性返回到RxSwift中的委托方法吗?

问题描述 投票:0回答:1

我希望使以下功能具有反应性

func partialRevealDrawerHeight(bottomSafeArea: CGFloat) -> CGFloat {
    return driveupKeypadViewModel.selectedDigits.isEmpty ? 394 : 457
}

我使该属性可观察,导致尝试以下代码:

func partialRevealDrawerHeight(bottomSafeArea: CGFloat) -> CGFloat {
    return keypadViewModel.selectedDigits
        .subscribe { value in
            return value.map { $0.isEmpty ? 394 : 457 }
        }
        .disposed(by: disposeBag)
}

我收到警告

未调用'map'的结果

以及错误

无法将类型'()'的返回表达式转换为类型'CGFloat'

我也尝试过:

return keypadViewModel.selectedDigits.map { $0.isEmpty ? 394 : 457 }

错误是

无法将'Observable'类型的返回表达式转换为'CGFloat'类型的返回

将哪种observables值用于此委托方法的正确设置是什么?

ios rx-swift
1个回答
0
投票

未调用'map'的结果

这是因为subscribe块不希望返回值。

subscribe { value in
        return value.map { $0.isEmpty ? 394 : 457 }
    }

无法将类型'()'的返回表达式转换为类型'CGFloat'

整个返回值类型为Void类型,而函数返回所需类型为CGFloat。

keypadViewModel.selectedDigits
    .subscribe { value in
        return value.map { $0.isEmpty ? 394 : 457 }
    }
    .disposed(by: disposeBag)

我不知道您想在这里实现什么。由于selectedDigits是可观察的,因此我可能会订阅这样的内容,而不是创建函数:

keypadViewModel.selectedDigits.map { $0.isEmpty ? 394.0 : 457.0 }
    .subscribe { value in
        // do work here
    }
    .disposed(by: disposeBag)
© www.soinside.com 2019 - 2024. All rights reserved.