Skip to content

Commit 34d972a

Browse files
committed
Typed result
1 parent bc4b998 commit 34d972a

File tree

3 files changed

+17
-5
lines changed

3 files changed

+17
-5
lines changed

NTLBridgeDemo/NTLBridgeDemo/ContentView.swift

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,16 @@ struct ContentView: View {
6969
Button("Call js sync") {
7070
model.webView.callHandler("syn.tag") { process($0) }
7171
}
72+
Button("Call js typed sync") {
73+
model.webView.callTypedHandler("syn.tag", expecting: String.self) { result in
74+
switch result {
75+
case .success(let success):
76+
model.jsResult = "Typed result: \(success)"
77+
case .failure(let failure):
78+
model.jsResult = "Typed error: \(failure.localizedDescription)"
79+
}
80+
}
81+
}
7282
Button("Call js sync multiparam") {
7383
model.webView.callHandler("syn.multi", arguments: [["1": 111]]) { process($0) }
7484
}

Sources/NTLBridge/NTLWebView.swift

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -319,6 +319,7 @@ open class NTLWebView: WKWebView {
319319
public func callTypedHandler<T: Encodable, U: Decodable>(
320320
_ method: String,
321321
arguments: [T],
322+
expecting type: U.Type,
322323
completion: @escaping (Result<U, Error>) -> Void
323324
) {
324325
callHandler(method, arguments: arguments) { result in
@@ -343,9 +344,10 @@ open class NTLWebView: WKWebView {
343344
/// - discussion: 便捷方法,不需要传入参数数组
344345
public func callTypedHandler<U: Decodable>(
345346
_ method: String,
347+
expecting type: U.Type,
346348
completion: @escaping (Result<U, Error>) -> Void
347349
) {
348-
callTypedHandler(method, arguments: [String](), completion: completion)
350+
callTypedHandler(method, arguments: [String](), expecting: type, completion: completion)
349351
}
350352

351353
// MARK: - Internal Call Bridge Method

Tests/NTLBridgeTests/NTLWebViewTests.swift

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -367,7 +367,7 @@ struct NTLWebViewTests {
367367
var result: String?
368368
var error: Error?
369369

370-
webView.callTypedHandler("testStringMethod") { (response: Result<String, Error>) in
370+
webView.callTypedHandler("testStringMethod", expecting: String.self) { (response: Result<String, Error>) in
371371
switch response {
372372
case .success(let value):
373373
result = value
@@ -403,7 +403,7 @@ struct NTLWebViewTests {
403403
var result: TestUser?
404404
var error: Error?
405405

406-
webView.callTypedHandler("testUserMethod") { (response: Result<TestUser, Error>) in
406+
webView.callTypedHandler("testUserMethod", expecting: TestUser.self) { (response: Result<TestUser, Error>) in
407407
switch response {
408408
case .success(let value):
409409
result = value
@@ -443,7 +443,7 @@ struct NTLWebViewTests {
443443
var result: [TestItem]?
444444
var error: Error?
445445

446-
webView.callTypedHandler("testArrayMethod") { (response: Result<[TestItem], Error>) in
446+
webView.callTypedHandler("testArrayMethod", expecting: [TestItem].self) { (response: Result<[TestItem], Error>) in
447447
switch response {
448448
case .success(let value):
449449
result = value
@@ -489,7 +489,7 @@ struct NTLWebViewTests {
489489
var result: StrictUser?
490490
var error: Error?
491491

492-
webView.callTypedHandler("testIncompleteUserMethod") { (response: Result<StrictUser, Error>) in
492+
webView.callTypedHandler("testIncompleteUserMethod", expecting: StrictUser.self) { (response: Result<StrictUser, Error>) in
493493
switch response {
494494
case .success(let value):
495495
result = value

0 commit comments

Comments
 (0)