Skip to content

Commit dc19ad7

Browse files
committed
feat: swift models use the Codable protocol.
1 parent 88813c6 commit dc19ad7

File tree

13 files changed

+160
-86
lines changed

13 files changed

+160
-86
lines changed

SKGenerateModelTool.xcodeproj/project.pbxproj

Lines changed: 21 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@
3636
E04D748E2DB78945000913C0 /* SKCodeTypes.swift in Sources */ = {isa = PBXBuildFile; fileRef = E04D74842DB78945000913C0 /* SKCodeTypes.swift */; };
3737
E04D748F2DB78945000913C0 /* SKModelGenerator.swift in Sources */ = {isa = PBXBuildFile; fileRef = E04D74862DB78945000913C0 /* SKModelGenerator.swift */; };
3838
E04D74902DB78945000913C0 /* SKFileManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = E04D74852DB78945000913C0 /* SKFileManager.swift */; };
39+
E04D74952DB8EE1D000913C0 /* NSRootModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = E04D74942DB8EE1D000913C0 /* NSRootModel.swift */; };
3940
/* End PBXBuildFile section */
4041

4142
/* Begin PBXFileReference section */
@@ -74,6 +75,7 @@
7475
E04D74862DB78945000913C0 /* SKModelGenerator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SKModelGenerator.swift; sourceTree = "<group>"; };
7576
E04D74882DB78945000913C0 /* SKModelGeneratorUtils.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SKModelGeneratorUtils.swift; sourceTree = "<group>"; };
7677
E04D74892DB78945000913C0 /* SKStringExtension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SKStringExtension.swift; sourceTree = "<group>"; };
78+
E04D74942DB8EE1D000913C0 /* NSRootModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NSRootModel.swift; sourceTree = "<group>"; };
7779
/* End PBXFileReference section */
7880

7981
/* Begin PBXFrameworksBuildPhase section */
@@ -159,19 +161,14 @@
159161
BC88CE9F2467A8A600A4828B /* SKGenerateModelTool */ = {
160162
isa = PBXGroup;
161163
children = (
162-
BC88D01D2467C2AA00A4828B /* SKCodeBuilder.swift */,
163-
E04D74832DB78945000913C0 /* SKCodeBuilderConfig.swift */,
164-
E04D74842DB78945000913C0 /* SKCodeTypes.swift */,
165-
E04D74852DB78945000913C0 /* SKFileManager.swift */,
166-
E04D74862DB78945000913C0 /* SKModelGenerator.swift */,
167-
E04D74882DB78945000913C0 /* SKModelGeneratorUtils.swift */,
168-
E04D74892DB78945000913C0 /* SKStringExtension.swift */,
169-
A44B9C8F2786922C00BA8991 /* Highlightr */,
170164
BC88CEA02467A8A600A4828B /* AppDelegate.swift */,
171165
BC88CEA22467A8A600A4828B /* ViewController.swift */,
172-
BCB184B224B808AF00C2A5D3 /* SKEncryptString */,
173166
BCB6929E24A2EC8F004AC91A /* EncryptionController.swift */,
174167
BC874A19250A238C00F3A346 /* SKTextView.swift */,
168+
E04D74942DB8EE1D000913C0 /* NSRootModel.swift */,
169+
E04D74912DB8DCFF000913C0 /* SKCodeBuilder */,
170+
BCB184B224B808AF00C2A5D3 /* SKEncryptString */,
171+
A44B9C8F2786922C00BA8991 /* Highlightr */,
175172
BC88CEA42467A8AA00A4828B /* Assets.xcassets */,
176173
BC88CEA62467A8AA00A4828B /* Main.storyboard */,
177174
BC88CEA92467A8AA00A4828B /* Info.plist */,
@@ -192,6 +189,20 @@
192189
path = SKEncryptString;
193190
sourceTree = "<group>";
194191
};
192+
E04D74912DB8DCFF000913C0 /* SKCodeBuilder */ = {
193+
isa = PBXGroup;
194+
children = (
195+
BC88D01D2467C2AA00A4828B /* SKCodeBuilder.swift */,
196+
E04D74832DB78945000913C0 /* SKCodeBuilderConfig.swift */,
197+
E04D74862DB78945000913C0 /* SKModelGenerator.swift */,
198+
E04D74882DB78945000913C0 /* SKModelGeneratorUtils.swift */,
199+
E04D74842DB78945000913C0 /* SKCodeTypes.swift */,
200+
E04D74852DB78945000913C0 /* SKFileManager.swift */,
201+
E04D74892DB78945000913C0 /* SKStringExtension.swift */,
202+
);
203+
path = SKCodeBuilder;
204+
sourceTree = "<group>";
205+
};
195206
/* End PBXGroup section */
196207

197208
/* Begin PBXNativeTarget section */
@@ -274,6 +285,7 @@
274285
files = (
275286
BC6E5D5224C0770800809D98 /* EncryptExampleModel.m in Sources */,
276287
BC874A1A250A238C00F3A346 /* SKTextView.swift in Sources */,
288+
E04D74952DB8EE1D000913C0 /* NSRootModel.swift in Sources */,
277289
BCB6929F24A2EC8F004AC91A /* EncryptionController.swift in Sources */,
278290
BC88D01E2467C2AA00A4828B /* SKCodeBuilder.swift in Sources */,
279291
A44B9D562786953A00BA8991 /* Theme.swift in Sources */,

SKGenerateModelTool/Base.lproj/Main.storyboard

Lines changed: 40 additions & 40 deletions
Large diffs are not rendered by default.

SKGenerateModelTool/EncryptionController.swift

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -9,29 +9,28 @@
99
import Cocoa
1010

1111
class EncryptionController: NSViewController {
12-
1312
let UseKeyBtnSelectStateCacheKey = "UseKeyBtnSelectStateCacheKey"
1413
let CipherContentCacheKey = "CipherContentCacheKey"
1514

1615
@IBOutlet var inputTextView: NSTextView!
1716
@IBOutlet var hTextView: NSTextView!
1817
@IBOutlet var mTextView: NSTextView!
19-
@IBOutlet weak var useKeyBtn: NSButton!
20-
@IBOutlet weak var keyTF: NSTextField!
18+
@IBOutlet var useKeyBtn: NSButton!
19+
@IBOutlet var keyTF: NSTextField!
2120

2221
lazy var inputTextColor = NSColor.blue
23-
lazy var codeTextColor = NSColor(red: 215/255.0, green: 0/255.0 , blue: 143/255.0, alpha: 1.0)
22+
lazy var codeTextColor = NSColor(red: 215/255.0, green: 0/255.0, blue: 143/255.0, alpha: 1.0)
2423

2524
@IBAction func encryptString(_ sender: NSButton) {
2625
if let inputString = inputTextView.textStorage?.string {
2726
let state = useKeyBtn.state
28-
UserDefaults.standard.set(state == .on , forKey: UseKeyBtnSelectStateCacheKey)
27+
UserDefaults.standard.set(state == .on, forKey: UseKeyBtnSelectStateCacheKey)
2928
let key = state == .on ? keyTF.stringValue : nil
3029
UserDefaults.standard.setValue(key, forKey: CipherContentCacheKey)
3130
let tempStr = inputString.replacingOccurrences(of: " ", with: "")
3231
if tempStr.isBlank { return }
3332
configJsonTextView(text: inputString, textView: inputTextView, color: inputTextColor)
34-
SKEncryptTool.encryptString(str: inputString, key: key) {[weak self] (hStr, mStr) in
33+
SKEncryptTool.encryptString(str: inputString, key: key) { [weak self] hStr, mStr in
3534
let hstring = hStr.substring(to: hStr.length)
3635
self?.configJsonTextView(text: hstring, textView: self!.hTextView, color: (self?.codeTextColor)!)
3736
let mstring = mStr.substring(to: mStr.length)
@@ -60,7 +59,7 @@ class EncryptionController: NSViewController {
6059

6160
/// config ui on main queue.
6261

63-
private func configJsonTextView(text:String, textView:NSTextView, color:NSColor) {
62+
private func configJsonTextView(text: String, textView: NSTextView, color: NSColor) {
6463
let attrString = NSAttributedString(string: text)
6564
DispatchQueue.main.async {
6665
textView.textStorage?.setAttributedString(attrString)
@@ -73,7 +72,7 @@ class EncryptionController: NSViewController {
7372
super.viewDidLoad()
7473

7574
useKeyBtn.state = UserDefaults.standard.bool(forKey: UseKeyBtnSelectStateCacheKey) ? .on : .off
76-
if let key = UserDefaults.standard.string(forKey: CipherContentCacheKey) {
75+
if let key = UserDefaults.standard.string(forKey: CipherContentCacheKey) {
7776
keyTF.stringValue = key
7877
}
7978

SKGenerateModelTool/NSRootModel.swift

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
//
2+
// NSRootModel.swift
3+
// SKGenerateModelTool
4+
//
5+
// Created by SHANGKUN on 2025/04/23.
6+
// Copyright © 2025 SKGenerateModelTool. All rights reserved.
7+
//
8+
9+
struct NSRootModel: Codable {
10+
var resultbody: JKResultbodyModel?
11+
var status: String? // 1
12+
var message: String? // 成功
13+
}
14+
15+
struct JKResultbodyModel: Codable {
16+
var id: Int = 0 // 1029
17+
var popJumpUrl: String?
18+
var userHaveHrReplyRights: Bool = false // true
19+
var cardSoftMoreDetailList: [JKCardSoftMoreDetailListModel]?
20+
var cardSoftList: [JKCardSoftListModel]?
21+
var cardRightsEndDetailList: [JKCardRightsEndDetailListModel]?
22+
var lastHrReplyOrderId: String?
23+
var hrReplyRightsLastNum: Int = 0 // 7
24+
var bubbleTextShowGiftIcon: Bool = false // false
25+
var userTwoDayNotTalked: Bool = false // false
26+
var scoreShowRightsLeftDayNum: Int = 0 // 0
27+
var canUseHrReply: Bool = false // true
28+
var jobMatchScore: Int = 0 // 50
29+
var isUserThreeDayNoTalk: Bool = false // false
30+
var configTextMatchScore: Int = 0 // 85
31+
var chatBubbleText: String?
32+
var userLastUseHrReplyIsToday: Bool = false // false
33+
var jobMatchScoreShow: Int = 0 // 50
34+
var applyBubbleText: String?
35+
var giveHrReply: Bool = false // false
36+
var configThresholdMatchScore: Int = 0 // 80
37+
var userHaveScoreShowRights: Bool = false // false
38+
var serviceCanUsed: Bool = false // true
39+
var userFebruaryAlive: Bool = false // false
40+
}
41+
42+
struct JKCardSoftMoreDetailListModel: Codable {
43+
var rightsCount: Int = 0 // 7
44+
var haveRights: Bool = false // false
45+
var canUseExchange: Bool = false // true
46+
var skuId: Int = 0 // 491
47+
var rewardType: String? // 0
48+
var exchangeGoldCoins: Int = 0 // 20
49+
var cardType: String? // 1
50+
var equityId: Int = 0 // 17
51+
}
52+
53+
struct JKCardRightsEndDetailListModel: Codable {
54+
var rightsEndSkuId: Int = 0 // 491
55+
var rightsEndEquityId: Int = 0 // 17
56+
var rightsEndCanUseExchange: Bool = false // true
57+
var rightsEndExchangeGoldCoins: Int = 0 // 20
58+
var rightsEndRightsCount: Int = 0 // 7
59+
var cardType: String? // 1
60+
}
61+
62+
struct JKCardSoftListModel: Codable {
63+
var cardType: String? // 2
64+
}

SKGenerateModelTool/SKCodeBuilderConfig.swift renamed to SKGenerateModelTool/SKCodeBuilder/SKCodeBuilderConfig.swift

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,5 @@ public class SKCodeBuilderConfig {
3030
/// 是否生成注释
3131
var shouldGenerateComment = false
3232

33-
/// 初始化方法
3433
public init() {}
35-
}
34+
}

SKGenerateModelTool/SKModelGenerator.swift renamed to SKGenerateModelTool/SKCodeBuilder/SKModelGenerator.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ class SKModelGenerator {
2525
var toJsonString = NSMutableString()
2626

2727
var fileType: String {
28-
return config.codeType.fileExtension
28+
config.codeType.fileExtension
2929
}
3030

3131
init(config: SKCodeBuilderConfig, commentDicts: [String: String]?) {

SKGenerateModelTool/SKModelGeneratorUtils.swift renamed to SKGenerateModelTool/SKCodeBuilder/SKModelGeneratorUtils.swift

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -13,27 +13,27 @@ extension SKModelGenerator {
1313
if config.codeType == .objectiveC {
1414
if key.isEmpty { // Root model
1515
if config.jsonType == .yyModel, config.superClassName.compare("NSObject") == .orderedSame {
16-
hString.append("\n@interface \(config.rootModelName) : \(config.superClassName) <YYModel>\n")
16+
hString.append("\n@interface \(config.rootModelName): \(config.superClassName) <YYModel>\n")
1717
} else {
18-
hString.append("\n@interface \(config.rootModelName) : \(config.superClassName)\n")
18+
hString.append("\n@interface \(config.rootModelName): \(config.superClassName)\n")
1919
}
2020
mString.append("\n@implementation \(config.rootModelName)\n")
2121
} else { // sub model
2222
let modelName = modelClassName(with: key)
2323
hString.insert("@class \(modelName);\n", at: 0)
2424
if config.jsonType == .yyModel, config.superClassName.compare("NSObject") == .orderedSame {
25-
hString.append("\n@interface \(modelName) : \(config.superClassName) <YYModel>\n")
25+
hString.append("\n@interface \(modelName): \(config.superClassName) <YYModel>\n")
2626
} else {
27-
hString.append("\n@interface \(modelName) : \(config.superClassName)\n")
27+
hString.append("\n@interface \(modelName): \(config.superClassName)\n")
2828
}
2929
mString.append("\n@implementation \(modelName)\n")
3030
}
3131
} else if config.codeType == .swift {
3232
if key.isEmpty { // Root model
33-
hString.append("\nclass \(config.rootModelName) : \(config.superClassName) {\n")
33+
hString.append("\nstruct \(config.rootModelName): \(config.superClassName) {\n")
3434
} else { // sub model
3535
let modelName = modelClassName(with: key)
36-
hString.append("\nclass \(modelName) : \(config.superClassName) {\n")
36+
hString.append("\nstruct \(modelName): \(config.superClassName) {\n")
3737
}
3838
} else if config.codeType == .dart {
3939
var modelName = config.rootModelName
@@ -150,7 +150,7 @@ extension SKModelGenerator {
150150
case .objectiveC:
151151
hString.append("\(ocCommentName(key, "\(intValue)"))@property (nonatomic, assign) NSInteger itemId;\n")
152152
case .swift:
153-
hString.append(" var itemId: Int = 0 \(singlelineCommentName(key, "\(intValue)"))\n")
153+
hString.append(" var itemId: Int = 0 \(singlelineCommentName(key, "\(intValue)"))\n")
154154
case .dart:
155155
hString.append(" int? itemId; \(singlelineCommentName(key, "\(intValue)"))\n")
156156
generateDartIntJsonParsing(key: "itemId", hString: hString)
@@ -162,7 +162,7 @@ extension SKModelGenerator {
162162
case .objectiveC:
163163
hString.append("\(ocCommentName(key, "\(intValue)"))@property (nonatomic, assign) NSInteger \(key);\n")
164164
case .swift:
165-
hString.append(" var \(key): Int = 0 \(singlelineCommentName(key, "\(intValue)"))\n")
165+
hString.append(" var \(key): Int = 0 \(singlelineCommentName(key, "\(intValue)"))\n")
166166
case .dart:
167167
hString.append(" int? \(key); \(singlelineCommentName(key, "\(intValue)"))\n")
168168
generateDartIntJsonParsing(key: key, hString: hString)
@@ -181,7 +181,7 @@ extension SKModelGenerator {
181181
case .objectiveC:
182182
hString.append("\(ocCommentName(key, idValue))@property (nonatomic, copy) NSString *itemId;\n")
183183
case .swift:
184-
hString.append(" var itemId: String? \(commentName(key, idValue))\n")
184+
hString.append(" var itemId: String? \(singlelineCommentName(key, idValue))\n")
185185
case .dart:
186186
hString.append(" String? \(key); \(singlelineCommentName(key, idValue))\n")
187187
generateDartStringJsonParsing(key: key, hString: hString)
@@ -194,9 +194,9 @@ extension SKModelGenerator {
194194
hString.append("\(ocCommentName(key, idValue))@property (nonatomic, copy) NSString *\(key);\n")
195195
case .swift:
196196
if idValue.count > 12 {
197-
hString.append(" var \(key): String? \(commentName(key, idValue, false))\n")
197+
hString.append(" var \(key): String? \(singlelineCommentName(key, idValue, false))\n")
198198
} else {
199-
hString.append(" var \(key): String? \(commentName(key, idValue))\n")
199+
hString.append(" var \(key): String? \(singlelineCommentName(key, idValue))\n")
200200
}
201201
case .dart:
202202
hString.append(" String? \(key); \(singlelineCommentName(key, idValue))\n")
@@ -213,7 +213,7 @@ extension SKModelGenerator {
213213
case .objectiveC:
214214
hString.append("\(ocCommentName(key, "<#泛型#>"))@property (nonatomic, strong) id \(key);\n")
215215
case .swift:
216-
hString.append(" var \(key): Any? \(singlelineCommentName(key, "<#泛型#>"))\n")
216+
hString.append(" var \(key): Any? \(singlelineCommentName(key, "<#泛型#>"))\n")
217217
case .dart:
218218
hString.append(" dynamic? \(key); \(singlelineCommentName(key, "<#泛型#>"))\n")
219219

@@ -446,7 +446,7 @@ private extension SKModelGenerator {
446446
case .objectiveC:
447447
hString.append("\(ocCommentName(key, "\(numValue)"))@property (nonatomic, assign) CGFloat \(key);\n")
448448
case .swift:
449-
hString.append(" var \(key): Double? \(singlelineCommentName(key, "\(numValue)"))\n")
449+
hString.append(" var \(key): Double? \(singlelineCommentName(key, "\(numValue)"))\n")
450450
case .dart:
451451
hString.append(" double? \(key); \(singlelineCommentName(key, "\(numValue)"))\n")
452452

@@ -477,7 +477,7 @@ private extension SKModelGenerator {
477477
case .objectiveC:
478478
hString.append("\(ocCommentName(key, "\(numValue)"))@property (nonatomic, assign) BOOL \(key);\n")
479479
case .swift:
480-
hString.append(" var \(key): Bool = false \(singlelineCommentName(key, numValue.boolValue == true ? "true" : "false"))\n")
480+
hString.append(" var \(key): Bool = false \(singlelineCommentName(key, numValue.boolValue == true ? "true" : "false"))\n")
481481
case .dart:
482482
hString.append(" bool? \(key); \(singlelineCommentName(key, numValue.boolValue == true ? "true" : "false"))\n")
483483
let fString =
@@ -520,18 +520,18 @@ private extension SKModelGenerator {
520520
func handleSwiftArrayValue(firstObject: Any, key: String, hString: NSMutableString) {
521521
if firstObject is String {
522522
// String 类型
523-
hString.append(" var \(key): [String]? \(singlelineCommentName(key, "", false))\n")
523+
hString.append(" var \(key): [String]? \(singlelineCommentName(key, "", false))\n")
524524
} else if firstObject is [String: Any] {
525525
// Dictionary 类型
526526
let key = handleMaybeSameKey(key)
527527
let modeName = modelClassName(with: key)
528528
handleDicts[key] = firstObject
529-
hString.append(" var \(key): [\(modeName)]? \(singlelineCommentName(key, "", false))\n")
529+
hString.append(" var \(key): [\(modeName)]? \(singlelineCommentName(key, "", false))\n")
530530
} else if let nestedArray = firstObject as? [Any] {
531531
// Array 类型
532532
handleArrayValue(arrayValue: nestedArray, key: key, hString: hString)
533533
} else {
534-
hString.append(" var \(key): [Any]? \(singlelineCommentName(key, "", false))\n")
534+
hString.append(" var \(key): [Any]? \(singlelineCommentName(key, "", false))\n")
535535
}
536536
}
537537

SKGenerateModelTool/SKEncryptString/SKEncryptTool.swift

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -11,14 +11,12 @@ import Cocoa
1111
typealias EncryptComplete = (NSMutableString, NSMutableString) -> ()
1212

1313
class SKEncryptTool: NSObject {
14-
1514
/// 加密字符串
1615
/// - Parameters:
1716
/// - str: 待加密的字符串
1817
/// - key: 密钥(可选设置)
1918
/// - complete: 完成回调
20-
static func encryptString(str:String, key:String?, complete:EncryptComplete?){
21-
19+
static func encryptString(str: String, key: String?, complete: EncryptComplete?) {
2220
let tempStr = str.replacingOccurrences(of: " ", with: "")
2321
if tempStr.isBlank { return }
2422
let value = NSMutableString()
@@ -27,24 +25,24 @@ class SKEncryptTool: NSObject {
2725
var cstring: [CChar] = []
2826
if let cstr = str.cString(using: .utf8) {
2927
cstring = cstr
30-
length = cstring.count-1
28+
length = cstring.count - 1
3129
}
3230
var keyLength = 0
3331
var ckeystring: [CChar] = []
3432
if let secretKey = key {
3533
if secretKey.count > 0 {
3634
if let ckeystr = secretKey.cString(using: .utf8) {
3735
ckeystring = ckeystr
38-
keyLength = ckeystring.count-1
36+
keyLength = ckeystring.count - 1
3937
}
4038
}
4139
}
42-
let a:CChar = 99
40+
let a: CChar = 99
4341
let t = MemoryLayout<CChar>.stride
4442
let range = pow(2.0, Float(t * 7)) - 1
4543
let factor = Int8(arc4random_uniform(UInt32(range)) - 1)
4644
if keyLength > 0 {
47-
let b:CChar = 100
45+
let b: CChar = 100
4846
for index in 0..<keyLength {
4947
let k = b ^ factor ^ ckeystring[index]
5048
secretValues.appendFormat("%d,", k)
@@ -56,7 +54,7 @@ class SKEncryptTool: NSObject {
5654
cipherIndex %= keyLength
5755
let v = a ^ factor ^ ckeystring[cipherIndex]
5856
value.appendFormat("%d,", v ^ cstring[index])
59-
cipherIndex+=1
57+
cipherIndex += 1
6058
}
6159
} else {
6260
for index in 0..<length {

0 commit comments

Comments
 (0)