@@ -10,11 +10,11 @@ import UIKit
10
10
11
11
12
12
public class YTKKeyValueItem_Swift : NSObject {
13
- var itemId : String ?
14
- var itemObject : AnyObject ?
15
- var createdTime : NSDate ?
13
+ public var itemId : String ?
14
+ public var itemObject : YTKObject ?
15
+ public var createdTime : NSDate ?
16
16
17
- func description( ) -> String {
17
+ public func description( ) -> String {
18
18
return " id= \( itemId) , value= \( itemObject) , timeStamp= \( createdTime) "
19
19
}
20
20
@@ -116,31 +116,56 @@ public class YTKKeyValueStore_Swift: NSObject {
116
116
117
117
//MARK: 对象
118
118
119
+ private enum YTKKeyValueType {
120
+ case String, Number, Object
121
+ }
122
+
123
+ private class func valueWithType( object : AnyObject ! ) -> YTKKeyValueType {
124
+ if object is String {
125
+ return . String
126
+ } else if object as? NSNumber != nil {
127
+ return . Number
128
+ } else {
129
+ return . Object
130
+ }
131
+ }
132
+
119
133
/**
120
134
加入数据
121
135
122
136
:param: object 数据
123
137
:param: objectId 数据索引
124
138
:param: tableName 表单名
125
139
*/
140
+
126
141
public func putObject( object : AnyObject ! , withId objectId: String ! , intoTable tableName: String ! ) {
127
142
if !YTKKeyValueStore_Swift. checkTableName ( tableName) {
128
143
return
129
144
}
130
- var error : NSError ?
131
- var data = NSJSONSerialization . dataWithJSONObject ( object, options: NSJSONWritingOptions ( 0 ) , error: & error)
132
- if error != nil {
133
- println ( " error, faild to get json data " )
134
- return
145
+
146
+ let type = YTKKeyValueStore_Swift . valueWithType ( object)
147
+ var jsonString : String ?
148
+
149
+ if type == . Number || type == . Object{
150
+ let sqlObject : AnyObject ! = type == . Number ? [ object] : object
151
+ var error : NSError ?
152
+ let data = NSJSONSerialization . dataWithJSONObject ( sqlObject, options: NSJSONWritingOptions ( 0 ) , error: & error)
153
+ if error != nil {
154
+ println ( " error, faild to get json data " )
155
+ return
156
+ }
157
+ jsonString = NSString ( data: data!, encoding: NSUTF8StringEncoding)
135
158
} else {
136
- let jsonString = NSString ( data: data!, encoding: NSUTF8StringEncoding)
137
- let createTime = NSDate ( )
138
- let sql = NSString ( format: UPDATE_ITEM_SQL, tableName)
139
- var result : Bool ?
140
- dbQueue? . inDatabase ( { ( db) -> Void in
141
- result = db. executeUpdate ( sql, withArgumentsInArray: [ objectId, jsonString!, createTime] )
142
- } )
159
+ jsonString = object as? String
143
160
}
161
+
162
+ let createTime = NSDate ( )
163
+ let sql = NSString ( format: UPDATE_ITEM_SQL, tableName)
164
+ var result : Bool ?
165
+ dbQueue? . inDatabase ( { ( db) -> Void in
166
+ result = db. executeUpdate ( sql, withArgumentsInArray: [ objectId, jsonString!, createTime] )
167
+ } )
168
+
144
169
}
145
170
146
171
@@ -152,7 +177,7 @@ public class YTKKeyValueStore_Swift: NSObject {
152
177
153
178
:returns: 对象数据
154
179
*/
155
- public func getObjectById( objectId : String ! , fromTable tableName : String ! ) -> AnyObject ? {
180
+ public func getObjectById( objectId : String ! , fromTable tableName : String ! ) -> YTKObject ? {
156
181
let item = self . getYTKKeyValueItemById ( objectId, fromTable: tableName)
157
182
if item != nil {
158
183
return item!. itemObject
@@ -184,81 +209,16 @@ public class YTKKeyValueStore_Swift: NSObject {
184
209
rs. close ( )
185
210
} )
186
211
if json != nil {
187
- var error : NSError ?
188
- var result : AnyObject ? = NSJSONSerialization . JSONObjectWithData ( json!. dataUsingEncoding ( NSUTF8StringEncoding) !, options: NSJSONReadingOptions . AllowFragments, error: & error)
189
- if error != nil {
190
- println ( " error, faild to prase to json " )
191
- return nil
192
- }
193
212
var item = YTKKeyValueItem_Swift ( )
194
213
item. itemId = objectId
195
- item. itemObject = result!
214
+ item. itemObject = YTKObject ( value : json! )
196
215
item. createdTime = createdTime
197
216
return item
198
217
} else {
199
218
return nil
200
219
}
201
220
}
202
221
203
- //MARK: 字符串
204
-
205
- /**
206
- 插入字符串
207
-
208
- :param: string 字符串
209
- :param: stringId 索引
210
- :param: tableName 表单名
211
- */
212
- public func putString( string : String ! , withId stringId : String ! , intoTable tableName: String ! ) {
213
- self . putObject ( [ string] , withId: stringId, intoTable: tableName)
214
- }
215
-
216
- /**
217
- 获取字符串
218
-
219
- :param: stringId 索引
220
- :param: tableName 表单名
221
-
222
- :returns: 字符串
223
- */
224
- public func getStringById( stringId : String ! , fromTable tableName : String ! ) -> String ? {
225
- let array : AnyObject ? = self . getObjectById ( stringId, fromTable: tableName)
226
- if let result = array as? [ String ] {
227
- return result [ 0 ]
228
- } else {
229
- return nil
230
- }
231
- }
232
-
233
- //MARK: 数组
234
-
235
- /**
236
- 插入数字
237
-
238
- :param: number 数字
239
- :param: numberId 索引
240
- :param: tableName 表单名
241
- */
242
- public func putNumber( number : CGFloat ! , withId numberId : String ! , intoTable tableName : String ! ) {
243
- self . putObject ( [ number] , withId: numberId, intoTable: tableName)
244
- }
245
-
246
- /**
247
- 获取数字
248
-
249
- :param: numberId 索引
250
- :param: tableName 表单名
251
-
252
- :returns: 数字
253
- */
254
- public func getNumberById( numberId : String ! , fromTable tableName : String ! ) -> CGFloat ? {
255
- let array : AnyObject ? = self . getObjectById ( numberId, fromTable: tableName)
256
- if let result = array as? [ CGFloat ] {
257
- return result [ 0 ]
258
- } else {
259
- return nil
260
- }
261
- }
262
222
263
223
//MARK: 其他
264
224
@@ -269,38 +229,25 @@ public class YTKKeyValueStore_Swift: NSObject {
269
229
270
230
:returns: 所有数据
271
231
*/
272
- public func getAllItemsFromTable( tableName : String ! ) -> [ AnyObject ] ? {
232
+ public func getAllItemsFromTable( tableName : String ! ) -> [ YTKKeyValueItem_Swift ] ? {
273
233
if !YTKKeyValueStore_Swift. checkTableName ( tableName) {
274
234
return nil
275
235
}
276
236
let sql = NSString ( format: SELECT_ALL_SQL, tableName)
277
- var result : [ AnyObject ] = [ ]
237
+ var result : [ YTKKeyValueItem_Swift ] = [ ]
278
238
dbQueue? . inDatabase ( { ( db) -> Void in
279
239
var rs : FMResultSet = db. executeQuery ( sql, withArgumentsInArray: nil )
280
240
while ( rs. next ( ) ) {
281
241
var item = YTKKeyValueItem_Swift ( )
282
242
item. itemId = rs. stringForColumn ( " id " )
283
- item. itemObject = rs. stringForColumn ( " json " )
243
+ item. itemObject = YTKObject ( value : rs. stringForColumn ( " json " ) )
284
244
item. createdTime = rs. dateForColumn ( " createdTime " )
285
245
result. append ( item)
286
246
}
287
247
rs. close ( )
288
248
} )
289
- var error : NSError ?
290
-
291
- for i in 0 ..< result. count {
292
- var item : YTKKeyValueItem_Swift = result [ i] as YTKKeyValueItem_Swift
293
- error = nil
294
- var object : AnyObject ? = NSJSONSerialization . JSONObjectWithData ( item. itemObject!. dataUsingEncoding ( NSUTF8StringEncoding) !, options: NSJSONReadingOptions . AllowFragments, error: & error)
295
- if error != nil {
296
- println ( " error, faild to prase to json. " )
297
- } else {
298
- item. itemObject = object!
299
- result [ i] = item
300
- }
301
- }
302
-
303
- return result
249
+
250
+ return result == [ ] ? nil : result
304
251
}
305
252
306
253
/**
@@ -383,3 +330,86 @@ public class YTKKeyValueStore_Swift: NSObject {
383
330
384
331
}
385
332
333
+ //MARK: - 数据库的对象类型
334
+
335
+ public struct YTKObject {
336
+ private var value : AnyObject ?
337
+
338
+ public var objectValue : AnyObject ? {
339
+ get {
340
+ return self . value
341
+ }
342
+ }
343
+
344
+ public var stringValue : String ? {
345
+ get {
346
+ return self . value as? String
347
+ }
348
+ }
349
+
350
+ public var numberValue : NSNumber ? {
351
+
352
+ get {
353
+ if self . value == nil { return nil }
354
+
355
+ if let num = self . value as? NSNumber {
356
+ return num
357
+ } else {
358
+
359
+ var error : NSError ?
360
+ let result : AnyObject ? = NSJSONSerialization . JSONObjectWithData ( self . value!. dataUsingEncoding ( NSUTF8StringEncoding) !, options: NSJSONReadingOptions . AllowFragments, error: & error)
361
+ if error != nil {
362
+ return nil
363
+ } else {
364
+ if let num = result as? [ NSNumber ] {
365
+ return num [ 0 ]
366
+ } else {
367
+ return nil
368
+ }
369
+ }
370
+ }
371
+ }
372
+
373
+ }
374
+
375
+ public var dictionaryValue : Dictionary < String , AnyObject > ? {
376
+ get {
377
+ if self . value == nil { return nil }
378
+
379
+ var error : NSError ?
380
+ let result : AnyObject ? = NSJSONSerialization . JSONObjectWithData ( self . value!. dataUsingEncoding ( NSUTF8StringEncoding) !, options: NSJSONReadingOptions . AllowFragments, error: & error)
381
+ if error != nil {
382
+ return nil
383
+ } else {
384
+ if let dic = result as? Dictionary < String , AnyObject > {
385
+ return dic
386
+ } else {
387
+ return nil
388
+ }
389
+ }
390
+
391
+ }
392
+ }
393
+
394
+
395
+ public var arrayValue : Array < AnyObject > ? {
396
+ get {
397
+ if self . value == nil { return nil }
398
+
399
+ var error : NSError ?
400
+ let result : AnyObject ? = NSJSONSerialization . JSONObjectWithData ( self . value!. dataUsingEncoding ( NSUTF8StringEncoding) !, options: NSJSONReadingOptions . AllowFragments, error: & error)
401
+ if error != nil {
402
+ return nil
403
+ } else {
404
+ if let dic = result as? Array < AnyObject > {
405
+ return dic
406
+ } else {
407
+ return nil
408
+ }
409
+ }
410
+ }
411
+ }
412
+
413
+
414
+ }
415
+
0 commit comments