Skip to content

Commit d67d354

Browse files
author
wushangkun
committed
add initial files
1 parent 698f433 commit d67d354

File tree

7 files changed

+537
-13
lines changed

7 files changed

+537
-13
lines changed

SKGenerateModelTool.xcodeproj/project.pbxproj

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
BC88CEA32467A8A600A4828B /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BC88CEA22467A8A600A4828B /* ViewController.swift */; };
1212
BC88CEA52467A8AA00A4828B /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = BC88CEA42467A8AA00A4828B /* Assets.xcassets */; };
1313
BC88CEA82467A8AA00A4828B /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = BC88CEA62467A8AA00A4828B /* Main.storyboard */; };
14+
BC88D01E2467C2AA00A4828B /* SKCodeBuilder.swift in Sources */ = {isa = PBXBuildFile; fileRef = BC88D01D2467C2AA00A4828B /* SKCodeBuilder.swift */; };
1415
/* End PBXBuildFile section */
1516

1617
/* Begin PBXFileReference section */
@@ -21,6 +22,7 @@
2122
BC88CEA72467A8AA00A4828B /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = "<group>"; };
2223
BC88CEA92467A8AA00A4828B /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
2324
BC88CEAA2467A8AA00A4828B /* SKGenerateModelTool.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = SKGenerateModelTool.entitlements; sourceTree = "<group>"; };
25+
BC88D01D2467C2AA00A4828B /* SKCodeBuilder.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SKCodeBuilder.swift; sourceTree = "<group>"; };
2426
/* End PBXFileReference section */
2527

2628
/* Begin PBXFrameworksBuildPhase section */
@@ -55,6 +57,7 @@
5557
children = (
5658
BC88CEA02467A8A600A4828B /* AppDelegate.swift */,
5759
BC88CEA22467A8A600A4828B /* ViewController.swift */,
60+
BC88D01D2467C2AA00A4828B /* SKCodeBuilder.swift */,
5861
BC88CEA42467A8AA00A4828B /* Assets.xcassets */,
5962
BC88CEA62467A8AA00A4828B /* Main.storyboard */,
6063
BC88CEA92467A8AA00A4828B /* Info.plist */,
@@ -133,6 +136,7 @@
133136
isa = PBXSourcesBuildPhase;
134137
buildActionMask = 2147483647;
135138
files = (
139+
BC88D01E2467C2AA00A4828B /* SKCodeBuilder.swift in Sources */,
136140
BC88CEA32467A8A600A4828B /* ViewController.swift in Sources */,
137141
BC88CEA12467A8A600A4828B /* AppDelegate.swift in Sources */,
138142
);
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
3+
<plist version="1.0">
4+
<array/>
5+
</plist>
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
{
2+
"images" : [
3+
{
4+
"idiom" : "universal",
5+
"filename" : "confirm.png",
6+
"scale" : "1x"
7+
},
8+
{
9+
"idiom" : "universal",
10+
"scale" : "2x"
11+
},
12+
{
13+
"idiom" : "universal",
14+
"scale" : "3x"
15+
}
16+
],
17+
"info" : {
18+
"version" : 1,
19+
"author" : "xcode"
20+
}
21+
}

SKGenerateModelTool/Base.lproj/Main.storyboard

Lines changed: 356 additions & 11 deletions
Large diffs are not rendered by default.
Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,85 @@
1+
//
2+
// SKCodeBuilder.swift
3+
// SKGenerateModelTool
4+
//
5+
// Created by KUN on 2020/5/10.
6+
// Copyright © 2020 wushangkun. All rights reserved.
7+
//
8+
9+
import Cocoa
10+
11+
enum SKCodeBuilderCodeType: Int {
12+
case OC = 1
13+
case Swift
14+
case Java
15+
}
16+
17+
enum SKCodeBuilderJSONModelType: Int {
18+
case None = 0
19+
case YYModel
20+
case MJExtension
21+
case HandyJSON
22+
}
23+
24+
typealias BuildComplete = (NSMutableString, NSMutableString) -> ()
25+
typealias GenerateFileComplete = (Bool, String) -> ()
26+
27+
class SKCodeBuilder: NSObject {
28+
29+
var config = SKCodeBuilderConfig()
30+
31+
func build_OC_code(with jsonObj:Any, complete:BuildComplete?){
32+
let hString = NSMutableString()
33+
let mString = NSMutableString()
34+
handleDictValue(dictValue: jsonObj, key: "", hString: hString, mString: mString)
35+
if let handler = complete {
36+
handler(hString, mString)
37+
}
38+
}
39+
40+
func generate_OC_File(with filePath:String, hString:NSMutableString, mString:NSMutableString, complete:GenerateFileComplete) {
41+
42+
}
43+
44+
private func handleDictValue(dictValue:Any, key:String, hString:NSMutableString, mString:NSMutableString) {
45+
46+
if key.isBlank { // Root model
47+
let modeName = modelName(with: key)
48+
hString.appending("\n\n@interface \(modeName) : \(self.config.superClassName)\n\n")
49+
mString.appending("\n\n@implementation \(modeName)\n\n")
50+
51+
} else { // sub model
52+
hString.appending("\n\n@interface \(self.config.rootModelName) : \(self.config.superClassName)\n\n")
53+
mString.appending("\n\n@implementation \(self.config.rootModelName)\n\n")
54+
}
55+
}
56+
57+
private func modelName(with key:String) -> String {
58+
if key.isBlank { return config.rootModelName }
59+
let firstCharacterIndex = key.index(key.startIndex, offsetBy: 1)
60+
var firstCharacter = String(key[...firstCharacterIndex])
61+
firstCharacter = firstCharacter.uppercased()
62+
let start = String.Index.init(utf16Offset: 0, in: key)
63+
let end = String.Index.init(utf16Offset: 1, in: key)
64+
var modelName = key.replacingCharacters(in: start..<end, with: firstCharacter)
65+
if !modelName.hasPrefix(config.modelNamePrefix) {
66+
modelName = config.modelNamePrefix + key
67+
}
68+
return modelName
69+
}
70+
}
71+
72+
class SKCodeBuilderConfig: NSObject {
73+
var superClassName = "NSObject"
74+
var rootModelName = "NSRootModel"
75+
var modelNamePrefix = "NS"
76+
var codeType: SKCodeBuilderCodeType = .OC
77+
var jsonType: SKCodeBuilderJSONModelType = .None
78+
}
79+
80+
extension String {
81+
var isBlank: Bool {
82+
let trimmedStr = self.trimmingCharacters(in: .whitespacesAndNewlines)
83+
return trimmedStr.isEmpty
84+
}
85+
}

SKGenerateModelTool/ViewController.swift

Lines changed: 66 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,16 +9,80 @@
99
import Cocoa
1010

1111
class ViewController: NSViewController {
12+
13+
@IBOutlet weak var urlTF: NSTextField!
14+
@IBOutlet weak var jsonTextView: NSTextView!
15+
@IBOutlet weak var hTextView: NSTextView!
16+
@IBOutlet weak var mTextView: NSTextView!
17+
@IBOutlet weak var hTextViewHeightPriority: NSLayoutConstraint!
18+
@IBOutlet weak var superClassNameTF: NSTextField! /// default 3:5
19+
@IBOutlet weak var modelNamePrefixTF: NSTextField!
20+
@IBOutlet weak var rootModelNameTF: NSTextField!
21+
@IBOutlet weak var authorNameTF: NSTextField!
22+
@IBOutlet weak var reqTypeBtn: NSPopUpButton!
23+
@IBOutlet weak var codeTypeBtn: NSPopUpButton!
24+
@IBOutlet weak var jsonTypeBtn: NSPopUpButton!
25+
@IBOutlet weak var generateFileBtn: NSButton!
26+
27+
var outputFilePath: String?
28+
29+
let LastInputURLCacheKey = "LastInputURLCacheKey"
30+
let SuperClassNameCacheKey = "SuperClassNameCacheKey"
31+
let RootModelNameCacheKey = "RootModelNameCacheKey"
32+
let ModelNamePrefixCacheKey = "ModelNamePrefixCacheKey"
33+
let AuthorNameCacheKey = "AuthorNameCacheKey"
34+
let BuildCodeTypeCacheKey = "BuildCodeTypeCacheKey"
35+
let SupportJSONModelTypeCacheKey = "SupportJSONModelTypeCacheKey"
36+
let ShouldGenerateFileCacheKey = "ShouldGenerateFileCacheKey"
37+
let GenerateFilePathCacheKey = "GenerateFilePathCacheKey"
1238

1339
override func viewDidLoad() {
1440
super.viewDidLoad()
41+
42+
reqTypeBtn.removeAllItems()
43+
reqTypeBtn.addItems(withTitles: ["GET","POST"])
44+
reqTypeBtn.selectItem(at: 0)
45+
46+
codeTypeBtn.removeAllItems()
47+
codeTypeBtn.addItems(withTitles: ["Objective-C","Swift"])
48+
codeTypeBtn.selectItem(at: 0)
1549

16-
// Do any additional setup after loading the view.
50+
jsonTypeBtn.removeAllItems()
51+
jsonTypeBtn.addItems(withTitles: ["None","YYMode","MJExtension","HandyJSON"])
52+
jsonTypeBtn.selectItem(at: 0)
53+
54+
}
55+
56+
override func viewDidAppear() {
57+
loadUserLastInputContent()
58+
}
59+
60+
func loadUserLastInputContent() {
61+
if let lastUrl = UserDefaults.standard.string(forKey: LastInputURLCacheKey) {
62+
urlTF.stringValue = lastUrl
63+
}
64+
if let superClassName = UserDefaults.standard.string(forKey: SuperClassNameCacheKey) {
65+
superClassNameTF.stringValue = superClassName
66+
}
67+
if let modelNamePrefix = UserDefaults.standard.string(forKey: ModelNamePrefixCacheKey) {
68+
modelNamePrefixTF.stringValue = modelNamePrefix
69+
}
70+
if let rootModelName = UserDefaults.standard.string(forKey: RootModelNameCacheKey) {
71+
rootModelNameTF.stringValue = rootModelName
72+
}
73+
if let authorName = UserDefaults.standard.string(forKey: AuthorNameCacheKey) {
74+
authorNameTF.stringValue = authorName
75+
}
76+
if let outFilePath = UserDefaults.standard.string(forKey: LastInputURLCacheKey) {
77+
outputFilePath = outFilePath
78+
}
79+
1780
}
81+
82+
1883

1984
override var representedObject: Any? {
2085
didSet {
21-
// Update the view, if already loaded.
2286
}
2387
}
2488

0 commit comments

Comments
 (0)