8
8
9
9
import Cocoa
10
10
11
- class HomeDataSource {
11
+ struct HomeDataSource {
12
12
/** 头部注释 */
13
13
var fileHeaderArr : Array = [ String] ( )
14
- /** json数据 */
15
- var jsonDic : Dictionary = [ String: Any] ( )
16
14
/** 继承 */
17
- var inheritanceStr : String = " "
18
- /** 内容 */
19
- var contentArr : Array = [ HomeContentModel] ( )
20
- /** struct名称 */
21
- var structName : String = " "
15
+ var inheritanceStr : String
16
+ /* 内容 */
17
+ var contentArr : Array < HomeContentModel >
18
+ /** 文件名称 */
19
+ var fileName : String
20
+ /** 项目名称 */
21
+ var productName : String
22
22
23
- init ( ) {
23
+ init ( inheritanceStr: String , contentArr: [ HomeContentModel ] , fileName: String , productName: String ) {
24
+ self . inheritanceStr = inheritanceStr
25
+ self . contentArr = contentArr
26
+ self . fileName = fileName
27
+ self . productName = productName
28
+
24
29
let keyword = APPKeyword ( )
25
30
fileHeaderArr. removeAll ( )
26
31
fileHeaderArr. append ( keyword. annotationStr)
27
- fileHeaderArr. append ( " " )
28
- fileHeaderArr. append ( " \( keyword. annotationStr) \( App . appName) " )
32
+ fileHeaderArr. append ( " \( keyword. annotationStr) \( fileName) .swift " )
33
+ let product = productName. isEmpty ? " __projectName__ " : productName
34
+ fileHeaderArr. append ( " \( keyword. annotationStr) \( product) " )
29
35
fileHeaderArr. append ( keyword. annotationStr)
30
- fileHeaderArr. append ( " " )
31
- fileHeaderArr. append ( " \( keyword. annotationStr) \( App . copyright ) " )
36
+ fileHeaderArr. append ( " \( keyword . annotationStr ) Created by \( NSUserName ( ) ) on \( Date ( ) . formattingDate ( Date . dateFormatSlashDay ) ) " )
37
+ fileHeaderArr. append ( " \( keyword. annotationStr) Copyright © \( Date ( ) . formattingDate ( Date . dateForematYear ) ) 年 \( NSUserName ( ) ) . All rights reserved. " )
32
38
fileHeaderArr. append ( keyword. annotationStr)
33
39
}
40
+ }
41
+
42
+ // struct模型
43
+ struct HomeStructModel {
44
+ /** 名称 */
45
+ var structName : String
46
+ /** 继承 */
47
+ var inheritanceStr : String
48
+ /** 内容 */
49
+ var contentArr : Array < HomeContentModel >
34
50
51
+ init ( structName: String , contentArr: [ HomeContentModel ] , inheritanceStr: String = " " ) {
52
+ self . structName = structName
53
+ self . contentArr = contentArr
54
+ self . inheritanceStr = inheritanceStr
55
+ }
35
56
}
36
57
58
+
59
+ // 内容
37
60
class HomeContentModel {
38
61
/** key */
39
62
var key : String
@@ -73,22 +96,31 @@ class HomeContentModel {
73
96
74
97
struct FileDataModel {
75
98
99
+ // MARK:- public
76
100
// 创建
77
- static public func createFileSwift( _ name : String , homeData: HomeDataSource , success: ( Bool ) -> ( ) ) {
101
+ static public func createFileSwift( _ fileUrl : URL , homeData: HomeDataSource , success: ( Bool ) -> ( ) ) {
78
102
let manager = FileManager . default
79
- let fileName = " \( name) .swift "
80
- let fileUrl = getFilePath ( ) . appendingPathComponent ( fileName)
81
103
if manager. fileExists ( atPath: fileUrl. path) {
82
104
// 新增数据
83
105
let fileHandle = FileHandle ( forUpdatingAtPath: fileUrl. path)
84
106
fileHandle? . seekToEndOfFile ( )
85
107
86
108
// 添加模型
87
- wirteStructModel ( fileHandle, dataArray: flatStructModel ( homeData) )
109
+ let structModel = HomeStructModel ( structName: homeData. fileName, contentArr: homeData. contentArr, inheritanceStr: homeData. inheritanceStr)
110
+ wirteStructModel ( fileHandle, dataArray: flatStructModel ( structModel) )
88
111
89
112
fileHandle? . closeFile ( )
90
113
return
91
114
}
115
+
116
+ do {
117
+ var arr = fileUrl. path. components ( separatedBy: " / " )
118
+ arr. removeLast ( )
119
+ let path = arr. joined ( separator: " / " )
120
+ try manager. createDirectory ( atPath: path, withIntermediateDirectories: true , attributes: nil )
121
+ } catch {
122
+ }
123
+
92
124
if manager. createFile ( atPath: fileUrl. path, contents: nil , attributes: nil ) {
93
125
let fileHandle = FileHandle ( forUpdatingAtPath: fileUrl. path)
94
126
let appKeyword = APPKeyword ( )
@@ -110,7 +142,8 @@ struct FileDataModel {
110
142
}
111
143
112
144
// 添加模型
113
- wirteStructModel ( fileHandle, dataArray: flatStructModel ( homeData) )
145
+ let structModel = HomeStructModel ( structName: homeData. fileName, contentArr: homeData. contentArr, inheritanceStr: homeData. inheritanceStr)
146
+ wirteStructModel ( fileHandle, dataArray: flatStructModel ( structModel) )
114
147
115
148
// 关闭文件
116
149
fileHandle? . closeFile ( )
@@ -151,48 +184,43 @@ struct FileDataModel {
151
184
return array
152
185
}
153
186
154
- // 扁平数据处理
155
- static fileprivate func flatStructModel( _ homeData: HomeDataSource ) -> [ HomeDataSource ] {
156
- var array = [ HomeDataSource] ( )
157
-
158
- let dataSource = HomeDataSource ( )
159
- dataSource. structName = homeData. structName
160
- dataSource. contentArr = homeData. contentArr
161
- dataSource. inheritanceStr = homeData. inheritanceStr
162
- array. append ( dataSource)
187
+ // MARK: - fileprivate
188
+ // 数据处理
189
+ static fileprivate func flatStructModel( _ structData: HomeStructModel ) -> [ HomeStructModel ] {
190
+ var array = [ HomeStructModel] ( )
191
+ array. append ( structData)
163
192
164
- for item in homeData. contentArr {
165
- if item. childArr. count > 0 {
166
- let source = HomeDataSource ( )
167
- source. structName = item. outputType. writeStr
168
- source. contentArr = item. childArr
169
- source. inheritanceStr = homeData. inheritanceStr
170
- array += flatStructModel ( source)
193
+ for item in structData. contentArr {
194
+ if item. childArr. count > 0 && !item. isIgnore {
195
+ let model = HomeStructModel ( structName: item. childName, contentArr: item. childArr, inheritanceStr: structData. inheritanceStr)
196
+ array += flatStructModel ( model)
171
197
}
172
- }
198
+ }
199
+
173
200
return array
174
201
}
175
202
176
203
// 添加结构体
177
- static fileprivate func wirteStructModel( _ fileHandle: FileHandle ? , dataArray: [ HomeDataSource ] ) {
204
+ static fileprivate func wirteStructModel( _ fileHandle: FileHandle ? , dataArray: [ HomeStructModel ] ) {
178
205
dataArray. forEach {
179
- addStructModel ( fileHandle, homeData : $0)
206
+ addStructModel ( fileHandle, structModel : $0)
180
207
}
181
208
}
182
209
183
- static fileprivate func addStructModel( _ fileHandle: FileHandle ? , homeData: HomeDataSource ) {
210
+ // 写文件
211
+ static fileprivate func addStructModel( _ fileHandle: FileHandle ? , structModel: HomeStructModel ) {
184
212
let appKeyword = APPKeyword ( )
185
213
// 机构体开头
186
214
fileHandle? . write ( Data . newlineData ( ) )
187
215
var structStart : String = " "
188
- if homeData . inheritanceStr == appKeyword. handy {
189
- structStart = " \( appKeyword. uct) \( homeData . structName) \( appKeyword. colon) \( appKeyword. handy) \( appKeyword. lPar) "
216
+ if structModel . inheritanceStr == appKeyword. handy {
217
+ structStart = " \( appKeyword. uct) \( structModel . structName) \( appKeyword. colon) \( appKeyword. handy) \( appKeyword. lPar) "
190
218
} else {
191
- structStart = " \( appKeyword. uct) \( homeData . structName) \( appKeyword. lPar) "
219
+ structStart = " \( appKeyword. uct) \( structModel . structName) \( appKeyword. lPar) "
192
220
}
193
221
fileHandle? . write ( structStart. wirteData)
194
-
195
- for model in homeData . contentArr {
222
+
223
+ for model in structModel . contentArr {
196
224
if !model. isIgnore {
197
225
if !model. annotation. isEmpty {
198
226
fileHandle? . write ( Data . newlineData ( ) )
@@ -207,23 +235,7 @@ struct FileDataModel {
207
235
fileHandle? . write ( Data . newlineData ( ) )
208
236
fileHandle? . write ( " \( appKeyword. rPar) " . wirteData)
209
237
fileHandle? . write ( Data . newlineData ( ) )
210
-
211
- }
212
-
213
- // 获取桌面路径 创建时间文件夹
214
- static fileprivate func getFilePath( ) -> URL {
215
- let manager = FileManager . default
216
- let urlForDocument = manager. urls ( for: . desktopDirectory, in: . userDomainMask)
217
- let url = urlForDocument [ 0 ]
218
- let folderUrl = url. appendingPathComponent ( Date ( ) . formattingDate ( ) )
219
- if !manager. fileExists ( atPath: folderUrl. path) {
220
- do {
221
- try manager. createDirectory ( at: folderUrl, withIntermediateDirectories: true , attributes: nil )
222
- } catch {
223
- return url
224
- }
225
- }
226
- return folderUrl
238
+
227
239
}
228
240
229
241
}
0 commit comments