作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个Result
我在异步进程中使用的类型:
internal enum Result<T> {
case success(T)
case failure(Error)
}
我还有一个APIDataResultContext
我用来在 Operation
之间传递数据子类:
internal final class APIDataResultContext: NSObject {
// MARK: Properties
private let lock = NSLock()
private var _result: Result<Data>!
internal var result: Result<Data>! {
get {
lock.lock()
let temp = _result
lock.unlock()
return temp
}
set {
lock.lock()
_result = newValue
lock.unlock()
}
}
}
在我的单元测试中,我需要确定何时 result
已设置为APIDataResultContext
实例。我无法使用 KVO,因为我的 Result<T>
类型不能标记为 dynamic
因为它无法用 Objective-C 表示。
我不知道还有什么方法可以让我监控 result
除了使用闭包属性或 Notification
之外的其他方式进行更改,我宁愿不这样做。不过,如果有必要,我会采用两者之一。
我还可以通过哪些其他方式监控 result
的更改?
最佳答案
我最终向 APIDataResultContext
添加了一个闭包属性:
internal final class APIDataResultContext {
// MARK: Properties
internal var resultChanged: (()->())?
private let lock = NSLock()
private var _result: Result<Data>!
internal var result: Result<Data>! {
get {
lock.lock()
let temp = _result
lock.unlock()
return temp
}
set {
lock.lock()
_result = newValue
lock.unlock()
resultChanged?()
}
}
}
我在测试中使用闭包来确定结果
何时发生更改:
internal func testNeoWsFeedOperationWithDatesPassesDataToResultContext() {
let operationExpectation = expectation(description: #function)
let testData = DataUtility().data(from: "Hello, world!")
let mockSession = MockURLSession()
let testContext = APIDataResultContext()
testContext.resultChanged = {
operationExpectation.fulfill()
guard let result = testContext.result else {
XCTFail("Expected result")
return
}
switch result {
case .failure(_):
XCTFail("Expected data")
case .success(let data):
XCTAssertEqual(data, testData, "Expected '\(testData)'")
}
}
NeoWsFeedOperation(context: testContext, sessionType: mockSession, apiKey: testAPIKey, startDate: testDate, endDate: testDate).start()
mockSession.completionHandler?(testData, nil, nil)
wait(for: [operationExpectation], timeout: 2)
}
关于swift4 - 如何在非 Objective-C 类型上匹配 Swift 4 KVO?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47785135/
我是一名优秀的程序员,十分优秀!