1
1
import Foundation
2
2
3
+ func jsStructuredError( jsonValue: JSONValue ) -> NSError ? {
4
+ guard case let . dictionary( dictionary) = jsonValue,
5
+ let name = dictionary [ " name " ] ? . stringValue,
6
+ let message = dictionary [ " message " ] ? . stringValue,
7
+ let stack = dictionary [ " stack " ] ? . stringValue
8
+ else {
9
+ return nil
10
+ }
11
+ let description = " name: \( name) \n message: \( message) \n stack: \( stack) "
12
+ let userInfo : [ String : Any ] = [
13
+ NSLocalizedDescriptionKey: description,
14
+ ]
15
+ return NSError ( domain: " NTLBridge " , code: - 1 , userInfo: userInfo)
16
+ }
17
+
3
18
/// Bridge错误类型
4
19
public enum NTLBridgeError : Error , LocalizedError {
5
20
case invalidValue
@@ -9,15 +24,14 @@ public enum NTLBridgeError: Error, LocalizedError {
9
24
switch self {
10
25
case . invalidValue:
11
26
return " Invalid value for conversion "
12
- case . typeConversionFailed( let error) :
27
+ case let . typeConversionFailed( error) :
13
28
return " Type conversion failed: \( error. localizedDescription) "
14
29
}
15
30
}
16
31
}
17
32
18
33
/// Bridge工具类,提供JSON序列化/反序列化功能
19
- public final class NTLBridgeUtil {
20
-
34
+ public enum NTLBridgeUtil {
21
35
// MARK: - JSON Encoder/Decoder
22
36
23
37
/// 创建JSONEncoder实例,可被子类重写
@@ -76,46 +90,8 @@ public final class NTLBridgeUtil {
76
90
return JSONValue ( any: any) ?? . null
77
91
}
78
92
79
- /// 将JSONValue转换为Any类型
80
- /// - Parameter value: 要转换的JSONValue
81
- /// - Returns: 转换后的Any值
82
- public static func anyValue( from value: JSONValue ) -> Any ? {
83
- return value. rawValue
84
- }
85
-
86
- // MARK: - Array Conversion
87
-
88
- /// 将参数数组转换为JSONValue数组
89
- /// - Parameter args: 参数数组
90
- /// - Returns: JSONValue数组
91
- public static func jsonArguments( from args: [ Any ? ] ) -> [ JSONValue ] {
92
- return args. map { jsonValue ( from: $0) }
93
- }
94
-
95
- /// 将JSONValue数组转换为Any数组
96
- /// - Parameter values: JSONValue数组
97
- /// - Returns: Any数组
98
- public static func anyArguments( from values: [ JSONValue ] ) -> [ Any ? ] {
99
- return values. map { anyValue ( from: $0) }
100
- }
101
-
102
93
// MARK: - Message Parsing
103
94
104
- /// 解析来自JavaScript的消息
105
- /// - Parameter message: 消息字符串
106
- /// - Returns: 解析后的JSInboundMessage,解析失败返回nil
107
- public static func parseInboundMessage( _ message: String ) -> JSInboundMessage ? {
108
- guard let data = message. data ( using: . utf8) else {
109
- return nil
110
- }
111
-
112
- do {
113
- return try decoder. decode ( JSInboundMessage . self, from: data)
114
- } catch {
115
- return nil
116
- }
117
- }
118
-
119
95
/// 编码发往JavaScript的调用信息
120
96
/// - Parameter callInfo: 调用信息
121
97
/// - Returns: 编码后的JSON字符串,编码失败返回nil
@@ -130,20 +106,6 @@ public final class NTLBridgeUtil {
130
106
131
107
// MARK: - Type Conversion
132
108
133
- /// 将JSONValue转换为指定类型
134
- /// - Parameter value: 要转换的JSONValue
135
- /// - Returns: 转换后的指定类型,转换失败返回nil
136
- public static func convertValue< T: Decodable > ( _ value: JSONValue ? ) -> T ? {
137
- guard let value = value else { return nil }
138
-
139
- do {
140
- let data = try encoder. encode ( value)
141
- return try decoder. decode ( T . self, from: data)
142
- } catch {
143
- return nil
144
- }
145
- }
146
-
147
109
/// 将JSONValue转换为指定类型,抛出错误
148
110
/// - Parameter value: 要转换的JSONValue
149
111
/// - Returns: 转换后的指定类型
@@ -165,8 +127,8 @@ public final class NTLBridgeUtil {
165
127
/// - Parameter methodName: 方法名
166
128
/// - Returns: 是否有效
167
129
public static func isValidMethodName( _ methodName: String ) -> Bool {
168
- return !methodName. isEmpty &&
169
- !methodName. contains ( " " ) &&
170
- !methodName. hasPrefix ( " _ " )
130
+ return !methodName. isEmpty &&
131
+ !methodName. contains ( " " ) &&
132
+ !methodName. hasPrefix ( " _ " )
171
133
}
172
134
}
0 commit comments