@@ -1,6 +1,18 @@ |
||
1 | 1 |
excluded: |
2 | 2 |
- Carthage |
3 | 3 |
disabled_rules: |
4 |
- - identifier_name |
|
5 | 4 |
- nesting |
6 |
- - force_cast |
|
5 |
+ - force_cast |
|
6 |
+ |
|
7 |
+identifier_name: |
|
8 |
+ allowed_symbols: |
|
9 |
+ - _ |
|
10 |
+ validates_start_with_lowercase: false |
|
11 |
+ excluded: # 这些字符串除外 |
|
12 |
+ - id |
|
13 |
+ - vc |
|
14 |
+ - qr |
|
15 |
+ - pk |
|
16 |
+ - i |
|
17 |
+ - x |
|
18 |
+ - y |
@@ -89,7 +89,6 @@ |
||
89 | 89 |
05130FFD21CA1B39004EF1BE /* HardwareAuthorization.swift in Sources */ = {isa = PBXBuildFile; fileRef = 42FECF071EE0339500D4C695 /* HardwareAuthorization.swift */; }; |
90 | 90 |
05130FFE21CA1B39004EF1BE /* WaterfallFlowLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = 050F5D0F1FB9399E00A053D0 /* WaterfallFlowLayout.swift */; }; |
91 | 91 |
05130FFF21CA1B39004EF1BE /* WaterfallFlowConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 050F5D111FB93A5C00A053D0 /* WaterfallFlowConfiguration.swift */; }; |
92 |
- 0513100021CA1B39004EF1BE /* CLLocationExt.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0543272821C68C1900C6388D /* CLLocationExt.swift */; }; |
|
93 | 92 |
0513100121CA1B39004EF1BE /* CGPointExt.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0543272921C68C1900C6388D /* CGPointExt.swift */; }; |
94 | 93 |
0513100221CA1B39004EF1BE /* CGSizeExt.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0543272A21C68C1900C6388D /* CGSizeExt.swift */; }; |
95 | 94 |
0513100A21CA1B39004EF1BE /* UIBarButtonItemExt.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0543272E21C68C1900C6388D /* UIBarButtonItemExt.swift */; }; |
@@ -189,8 +188,6 @@ |
||
189 | 188 |
055BB541220AEA62009548AA /* NiblessView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 055BB540220AEA62009548AA /* NiblessView.swift */; }; |
190 | 189 |
055EFAD7221A4DB400450AD5 /* GroupQRView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 055EFAD6221A4DB400450AD5 /* GroupQRView.swift */; }; |
191 | 190 |
0569F6152200438C000A75CA /* Group.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 0569F613220042AF000A75CA /* Group.storyboard */; }; |
192 |
- 0569F61822014B24000A75CA /* NavigationBarDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0569F61722014B24000A75CA /* NavigationBarDelegate.swift */; }; |
|
193 |
- 0569F61A22014B30000A75CA /* NavigationBarProxy.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0569F61922014B30000A75CA /* NavigationBarProxy.swift */; }; |
|
194 | 191 |
0572B2C321E2FB3E00EAD2A2 /* WXApiObject.h in Headers */ = {isa = PBXBuildFile; fileRef = 0572B2BD21E2FB3C00EAD2A2 /* WXApiObject.h */; settings = {ATTRIBUTES = (Public, ); }; }; |
195 | 192 |
0572B2C421E2FB3E00EAD2A2 /* WechatAuthSDK.h in Headers */ = {isa = PBXBuildFile; fileRef = 0572B2BE21E2FB3D00EAD2A2 /* WechatAuthSDK.h */; settings = {ATTRIBUTES = (Public, ); }; }; |
196 | 193 |
0572B2C621E2FB3E00EAD2A2 /* libWeChatSDK.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 0572B2BF21E2FB3D00EAD2A2 /* libWeChatSDK.a */; }; |
@@ -417,7 +414,6 @@ |
||
417 | 414 |
053E127721F5B6E400A64893 /* AlertController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AlertController.swift; sourceTree = "<group>"; }; |
418 | 415 |
0540C8B01F8C9A640044FCC5 /* GroupPhotoRepository.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GroupPhotoRepository.swift; sourceTree = "<group>"; }; |
419 | 416 |
0540C8B21F8CA07E0044FCC5 /* FileModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FileModel.swift; sourceTree = "<group>"; }; |
420 |
- 0543272821C68C1900C6388D /* CLLocationExt.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CLLocationExt.swift; sourceTree = "<group>"; }; |
|
421 | 417 |
0543272921C68C1900C6388D /* CGPointExt.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CGPointExt.swift; sourceTree = "<group>"; }; |
422 | 418 |
0543272A21C68C1900C6388D /* CGSizeExt.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CGSizeExt.swift; sourceTree = "<group>"; }; |
423 | 419 |
0543272E21C68C1900C6388D /* UIBarButtonItemExt.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = UIBarButtonItemExt.swift; sourceTree = "<group>"; }; |
@@ -447,8 +443,6 @@ |
||
447 | 443 |
055BB540220AEA62009548AA /* NiblessView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NiblessView.swift; sourceTree = "<group>"; }; |
448 | 444 |
055EFAD6221A4DB400450AD5 /* GroupQRView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GroupQRView.swift; sourceTree = "<group>"; }; |
449 | 445 |
0569F613220042AF000A75CA /* Group.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; path = Group.storyboard; sourceTree = "<group>"; }; |
450 |
- 0569F61722014B24000A75CA /* NavigationBarDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NavigationBarDelegate.swift; sourceTree = "<group>"; }; |
|
451 |
- 0569F61922014B30000A75CA /* NavigationBarProxy.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NavigationBarProxy.swift; sourceTree = "<group>"; }; |
|
452 | 446 |
0572B2BC21E2FB3C00EAD2A2 /* README.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README.txt; sourceTree = "<group>"; }; |
453 | 447 |
0572B2BD21E2FB3C00EAD2A2 /* WXApiObject.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WXApiObject.h; sourceTree = "<group>"; }; |
454 | 448 |
0572B2BE21E2FB3D00EAD2A2 /* WechatAuthSDK.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WechatAuthSDK.h; sourceTree = "<group>"; }; |
@@ -939,7 +933,6 @@ |
||
939 | 933 |
0543272721C68C1900C6388D /* CoreGraphics */ = { |
940 | 934 |
isa = PBXGroup; |
941 | 935 |
children = ( |
942 |
- 0543272821C68C1900C6388D /* CLLocationExt.swift */, |
|
943 | 936 |
0543272921C68C1900C6388D /* CGPointExt.swift */, |
944 | 937 |
0543272A21C68C1900C6388D /* CGSizeExt.swift */, |
945 | 938 |
); |
@@ -1021,15 +1014,6 @@ |
||
1021 | 1014 |
path = Nibless; |
1022 | 1015 |
sourceTree = "<group>"; |
1023 | 1016 |
}; |
1024 |
- 0569F61622014AF9000A75CA /* NavigationBarDelegate */ = { |
|
1025 |
- isa = PBXGroup; |
|
1026 |
- children = ( |
|
1027 |
- 0569F61922014B30000A75CA /* NavigationBarProxy.swift */, |
|
1028 |
- 0569F61722014B24000A75CA /* NavigationBarDelegate.swift */, |
|
1029 |
- ); |
|
1030 |
- path = NavigationBarDelegate; |
|
1031 |
- sourceTree = "<group>"; |
|
1032 |
- }; |
|
1033 | 1017 |
0572B2BB21E2FAEE00EAD2A2 /* wxSDK */ = { |
1034 | 1018 |
isa = PBXGroup; |
1035 | 1019 |
children = ( |
@@ -1135,7 +1119,6 @@ |
||
1135 | 1119 |
05C5285921FEABBB0090ECB5 /* UIKitDelegate */ = { |
1136 | 1120 |
isa = PBXGroup; |
1137 | 1121 |
children = ( |
1138 |
- 0569F61622014AF9000A75CA /* NavigationBarDelegate */, |
|
1139 | 1122 |
05C5285C21FEAFAA0090ECB5 /* ViewControllerTransitioningDelegate */, |
1140 | 1123 |
05C5285421FE98E70090ECB5 /* GestureRecognizerDelegate */, |
1141 | 1124 |
05C8D22C21EF0F8E0001E847 /* NavigationControllerDelegate */, |
@@ -1625,7 +1608,6 @@ |
||
1625 | 1608 |
05130FFE21CA1B39004EF1BE /* WaterfallFlowLayout.swift in Sources */, |
1626 | 1609 |
05130FFF21CA1B39004EF1BE /* WaterfallFlowConfiguration.swift in Sources */, |
1627 | 1610 |
055BB53E220AEA3B009548AA /* NiblessViewController.swift in Sources */, |
1628 |
- 0513100021CA1B39004EF1BE /* CLLocationExt.swift in Sources */, |
|
1629 | 1611 |
059B58AA21F83B2E00FA64C2 /* CenterConfirmItem.swift in Sources */, |
1630 | 1612 |
05C5285E21FEB03F0090ECB5 /* ViewControllerTransitioningProxy.swift in Sources */, |
1631 | 1613 |
057317A421F5C6C0009B2FCE /* BottomCancelItem.swift in Sources */, |
@@ -1647,7 +1629,6 @@ |
||
1647 | 1629 |
0513100B21CA1B39004EF1BE /* UIColorExt.swift in Sources */, |
1648 | 1630 |
05C8D21221ED7B620001E847 /* UINavigationBar+FixSpace.swift in Sources */, |
1649 | 1631 |
05C8D21021ED7B280001E847 /* UIApplication+Swizzle.swift in Sources */, |
1650 |
- 0569F61A22014B30000A75CA /* NavigationBarProxy.swift in Sources */, |
|
1651 | 1632 |
0513100F21CA1B39004EF1BE /* UIViewExt.swift in Sources */, |
1652 | 1633 |
0513109B21CA3915004EF1BE /* QRCodeConfiguration.swift in Sources */, |
1653 | 1634 |
055BB541220AEA62009548AA /* NiblessView.swift in Sources */, |
@@ -1679,7 +1660,6 @@ |
||
1679 | 1660 |
05130F5E21C94C12004EF1BE /* PresentAppearAnimatedTransitioning.swift in Sources */, |
1680 | 1661 |
05130F5721C94C12004EF1BE /* AlertAnimator.swift in Sources */, |
1681 | 1662 |
0513109321CA3915004EF1BE /* ColorQR.swift in Sources */, |
1682 |
- 0569F61822014B24000A75CA /* NavigationBarDelegate.swift in Sources */, |
|
1683 | 1663 |
05130F5C21C94C12004EF1BE /* ActionSheetAnimator.swift in Sources */, |
1684 | 1664 |
05130F5B21C94C12004EF1BE /* PresentAnimatable.swift in Sources */, |
1685 | 1665 |
05C8D22B21EF0EDC0001E847 /* NavigationControllerDelegate.swift in Sources */, |
@@ -11,16 +11,16 @@ import ObjectMapper |
||
11 | 11 |
import RxDataSources |
12 | 12 |
|
13 | 13 |
public struct GroupItem: JSONCode { |
14 |
- public var createAt = "" |
|
15 |
- public var createdAt: Date? |
|
16 |
- public var groupDesc: String = "" |
|
17 |
- public var groupLock: Bool = false |
|
18 |
- public var groupDefaultAvatar = 0 |
|
14 |
+ public var create_at = "" |
|
15 |
+ public var created_at: Date? |
|
16 |
+ public var group_desc: String = "" |
|
17 |
+ public var group_lock: Bool = false |
|
18 |
+ public var group_default_avatar = 0 |
|
19 | 19 |
public var admin_id = "" |
20 |
- public var groupName = "" |
|
20 |
+ public var group_name = "" |
|
21 | 21 |
public var group_from = 0 |
22 | 22 |
public var group_id = "" |
23 |
- public var groupAvatar = "" |
|
23 |
+ public var group_avatar = "" |
|
24 | 24 |
public var group_photo_num = 0 |
25 | 25 |
|
26 | 26 |
//tour group info |
@@ -49,16 +49,16 @@ extension GroupItem: Mappable { |
||
49 | 49 |
mutating public func mapping(map: Map) { |
50 | 50 |
let dateFormatter = DateFormatter() |
51 | 51 |
dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssZ" |
52 |
- createAt <- map["created_at"] |
|
53 |
- createdAt <- (map["created_at"], DateFormatterTransform(dateFormatter: dateFormatter)) |
|
54 |
- groupDesc <- map["group_desc"] |
|
55 |
- groupLock <- map["group_lock"] |
|
56 |
- groupDefaultAvatar <- map["group_default_avatar"] |
|
52 |
+ create_at <- map["created_at"] |
|
53 |
+ created_at <- (map["created_at"], DateFormatterTransform(dateFormatter: dateFormatter)) |
|
54 |
+ group_desc <- map["group_desc"] |
|
55 |
+ group_lock <- map["group_lock"] |
|
56 |
+ group_default_avatar <- map["group_default_avatar"] |
|
57 | 57 |
admin_id <- map["admin_id"] |
58 |
- groupName <- map["group_name"] |
|
58 |
+ group_name <- map["group_name"] |
|
59 | 59 |
group_from <- map["group_from"] |
60 | 60 |
group_id <- map["group_id"] |
61 |
- groupAvatar <- map["group_avatar"] |
|
61 |
+ group_avatar <- map["group_avatar"] |
|
62 | 62 |
group_photo_num <- map["group_photo_num"] |
63 | 63 |
gather_at <- (map["gathered_at"], DateFormatterTransform(dateFormatter: dateFormatter)) |
64 | 64 |
gathered_at <- map["gathered_at"] |
@@ -75,10 +75,10 @@ extension GroupItem: Mappable { |
||
75 | 75 |
schedules <- banner["schedules"] |
76 | 76 |
} |
77 | 77 |
|
78 |
- if let date = createdAt { |
|
78 |
+ if let date = created_at { |
|
79 | 79 |
let createDateFormatter = DateFormatter() |
80 | 80 |
createDateFormatter.dateFormat = "yyyy年MM月dd日 HH:mm" |
81 |
- createAt = createDateFormatter.string(from: date) |
|
81 |
+ create_at = createDateFormatter.string(from: date) |
|
82 | 82 |
} |
83 | 83 |
} |
84 | 84 |
} |
@@ -13,7 +13,7 @@ import RxDataSources |
||
13 | 13 |
public struct MessageListItem: JSONCode { |
14 | 14 |
public var content = "" |
15 | 15 |
public var msg_title: String = "" |
16 |
- public var createAt: String = "" |
|
16 |
+ public var create_at: String = "" |
|
17 | 17 |
public var from_avatar: String = "" |
18 | 18 |
public var msg_content: String = "" |
19 | 19 |
public var from_nickname: String = "" |
@@ -22,7 +22,7 @@ public struct MessageListItem: JSONCode { |
||
22 | 22 |
public var url: String = "" |
23 | 23 |
|
24 | 24 |
var read: Bool = false |
25 |
- public var createdAt: Date? |
|
25 |
+ public var created_at: Date? |
|
26 | 26 |
|
27 | 27 |
var pk = 0 |
28 | 28 |
var from_uid: String = "" |
@@ -42,7 +42,7 @@ extension MessageListItem: Mappable { |
||
42 | 42 |
mutating public func mapping(map: Map) { |
43 | 43 |
let dateFormatter = DateFormatter() |
44 | 44 |
dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssZ" |
45 |
- createdAt <- (map["created_at"], DateFormatterTransform(dateFormatter: dateFormatter)) |
|
45 |
+ created_at <- (map["created_at"], DateFormatterTransform(dateFormatter: dateFormatter)) |
|
46 | 46 |
content <- map["content"] |
47 | 47 |
pk <- map["pk"] |
48 | 48 |
read <- map["read"] |
@@ -57,8 +57,8 @@ extension MessageListItem: Mappable { |
||
57 | 57 |
url <- map["url"] |
58 | 58 |
title <- map["title"] |
59 | 59 |
|
60 |
- guard let createdAt = createdAt else { return } |
|
61 |
- createAt = createdAt.getTimeInfoFromDate() |
|
60 |
+ guard let created_at = created_at else { return } |
|
61 |
+ create_at = created_at.getTimeInfoFromDate() |
|
62 | 62 |
} |
63 | 63 |
} |
64 | 64 |
|
@@ -17,7 +17,7 @@ public struct OrderItem: JSONCode { |
||
17 | 17 |
public var displayPhoto: String = "" |
18 | 18 |
public var displayCreated: String = "" |
19 | 19 |
|
20 |
- var createdAt: Date? |
|
20 |
+ var created_at: Date? |
|
21 | 21 |
var body: String = "" |
22 | 22 |
var to_uid: String = "" |
23 | 23 |
var to_lid: String = "" |
@@ -50,14 +50,14 @@ extension OrderItem: Mappable { |
||
50 | 50 |
total_fee <- map["total_fee"] |
51 | 51 |
pay_status <- map["pay_status"] |
52 | 52 |
group_photo_info <- map["group_photo_info"] |
53 |
- createdAt <- (map["created_at"], DateFormatterTransform(dateFormatter: dateFormatter)) |
|
53 |
+ created_at <- (map["created_at"], DateFormatterTransform(dateFormatter: dateFormatter)) |
|
54 | 54 |
|
55 | 55 |
//model display layer |
56 | 56 |
order_id <- map["order_id"] |
57 | 57 |
displayPrice = "+\(total_fee / 100)" |
58 |
- guard let createdAt = createdAt, let photoInfo = group_photo_info else { return } |
|
59 |
- displayCreated = createdAt.getTimeString(format: "YYYY-MM-dd HH:MM") |
|
60 |
- displayPhoto = photoInfo.photoThumbnailUrl |
|
58 |
+ guard let created_at = created_at, let photoInfo = group_photo_info else { return } |
|
59 |
+ displayCreated = created_at.getTimeString(format: "YYYY-MM-dd HH:MM") |
|
60 |
+ displayPhoto = photoInfo.photo_thumbnail_url |
|
61 | 61 |
} |
62 | 62 |
} |
63 | 63 |
|
@@ -16,8 +16,8 @@ public struct PhotoCommentItem: JSONCode { |
||
16 | 16 |
public var comment: String = "" |
17 | 17 |
public var user_id: String = "" |
18 | 18 |
public var nickname: String = "" |
19 |
- public var createdAt: Date? |
|
20 |
- public var createAt: String = "" |
|
19 |
+ public var created_at: Date? |
|
20 |
+ public var create_at: String = "" |
|
21 | 21 |
|
22 | 22 |
init(json: [String: AnyObject]) { |
23 | 23 |
self.init(map: Map(mappingType: .fromJSON, JSON: json)) |
@@ -27,15 +27,15 @@ extension PhotoCommentItem: Mappable { |
||
27 | 27 |
mutating public func mapping(map: Map) { |
28 | 28 |
let dateFormatter = DateFormatter() |
29 | 29 |
dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssZ" |
30 |
- createdAt <- (map["created_t"], DateFormatterTransform(dateFormatter: dateFormatter)) |
|
30 |
+ created_at <- (map["created_t"], DateFormatterTransform(dateFormatter: dateFormatter)) |
|
31 | 31 |
avatar <- (map["avatar"]) |
32 | 32 |
comment <- map["comment"] |
33 | 33 |
user_id <- map["user_id"] |
34 | 34 |
nickname <- (map["nickname"]) |
35 | 35 |
comment <- map["comment"] |
36 | 36 |
|
37 |
- if let date = createdAt { |
|
38 |
- createAt = date.getTimeInfoFromDate() |
|
37 |
+ if let date = created_at { |
|
38 |
+ create_at = date.getTimeInfoFromDate() |
|
39 | 39 |
} |
40 | 40 |
} |
41 | 41 |
|
@@ -28,15 +28,15 @@ public struct PhotoItem: JSONCode { |
||
28 | 28 |
public var avatar = "" |
29 | 29 |
public var nickname = "" |
30 | 30 |
|
31 |
- public var commentNum = 0 |
|
31 |
+ public var comment_num = 0 |
|
32 | 32 |
public var thumbup_num = 0 |
33 | 33 |
|
34 |
- public var groupAvatar = "" |
|
35 |
- public var groupDefaultAvatar = 0 |
|
36 |
- public var groupName = "" |
|
34 |
+ public var group_avatar = "" |
|
35 |
+ public var group_default_avatar = 0 |
|
36 |
+ public var group_name = "" |
|
37 | 37 |
|
38 |
- public var photoThumbnailUrl = "" |
|
39 |
- public var photoThumbnail2Url = "" |
|
38 |
+ public var photo_thumbnail_url = "" |
|
39 |
+ public var photo_thumbnail2_url = "" |
|
40 | 40 |
public var photo_url = "" |
41 | 41 |
public var photo_share_url = "" |
42 | 42 |
public var thumbup = false |
@@ -44,7 +44,7 @@ public struct PhotoItem: JSONCode { |
||
44 | 44 |
public var rurl = "" |
45 | 45 |
public var nomark = 0 |
46 | 46 |
|
47 |
- public var createAt = "" |
|
47 |
+ public var create_at = "" |
|
48 | 48 |
public var create_at_time_interval = "" |
49 | 49 |
|
50 | 50 |
public var user_id = "" |
@@ -56,7 +56,7 @@ public struct PhotoItem: JSONCode { |
||
56 | 56 |
public var sizeCache = CGSize(width: 0, height: 0) |
57 | 57 |
public var display_payment_btn = 0 |
58 | 58 |
|
59 |
- var createdAt: Date? |
|
59 |
+ var created_at: Date? |
|
60 | 60 |
|
61 | 61 |
var photo_thumbnail2_w = 0 |
62 | 62 |
var photo_thumbnail2_h = 0 |
@@ -89,24 +89,24 @@ extension PhotoItem: Mappable { |
||
89 | 89 |
mutating public func mapping(map: Map) { |
90 | 90 |
let dateFormatter = DateFormatter() |
91 | 91 |
dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss'Z'" |
92 |
- createdAt <- (map["created_at"], DateFormatterTransform(dateFormatter: dateFormatter)) |
|
92 |
+ created_at <- (map["created_at"], DateFormatterTransform(dateFormatter: dateFormatter)) |
|
93 | 93 |
avatar <- map["avatar"] |
94 |
- commentNum <- map["comment_num"] |
|
95 |
- groupAvatar <- map["group_avatar"] |
|
96 |
- groupDefaultAvatar <- map["group_default_avatar"] |
|
94 |
+ comment_num <- map["comment_num"] |
|
95 |
+ group_avatar <- map["group_avatar"] |
|
96 |
+ group_default_avatar <- map["group_default_avatar"] |
|
97 | 97 |
group_from <- map["group_from"] |
98 | 98 |
group_id <- map["group_id"] |
99 |
- groupName <- map["group_name"] |
|
99 |
+ group_name <- map["group_name"] |
|
100 | 100 |
nickname <- map["nickname"] |
101 | 101 |
photoFrom <- map["photoFrom"] |
102 | 102 |
photo_h <- map["photo_h"] |
103 | 103 |
photo_w <- map["photo_w"] |
104 | 104 |
photo_id <- map["photo_id"] |
105 | 105 |
photo_thumbnail2_h <- map["photo_thumbnail2_h"] |
106 |
- photoThumbnail2Url <- map["photo_thumbnail2_url"] |
|
106 |
+ photo_thumbnail2_url <- map["photo_thumbnail2_url"] |
|
107 | 107 |
photo_thumbnail2_w <- map["photo_thumbnail2_w"] |
108 | 108 |
photo_thumbnail_h <- map["photo_thumbnail_h"] |
109 |
- photoThumbnailUrl <- map["photo_thumbnail_url"] |
|
109 |
+ photo_thumbnail_url <- map["photo_thumbnail_url"] |
|
110 | 110 |
photo_thumbnail_w <- map["photo_thumbnail_w"] |
111 | 111 |
photo_url <- map["photo_url"] |
112 | 112 |
photo_share_url <- map["photo_share_url"] |
@@ -119,10 +119,10 @@ extension PhotoItem: Mappable { |
||
119 | 119 |
rurl = porder["r_photo_url"] ?? "" |
120 | 120 |
murl = porder["m_photo_url"] ?? "" |
121 | 121 |
|
122 |
- guard let date = createdAt else { return } |
|
122 |
+ guard let date = created_at else { return } |
|
123 | 123 |
let createDateFormatter = DateFormatter() |
124 | 124 |
createDateFormatter.dateFormat = "yyyy年MM月dd日" |
125 |
- createAt = createDateFormatter.string(from: date) |
|
125 |
+ create_at = createDateFormatter.string(from: date) |
|
126 | 126 |
create_at_time_interval = date.getTimeInfoFromDate() |
127 | 127 |
} |
128 | 128 |
} |
@@ -13,5 +13,5 @@ protocol GroupRepository { |
||
13 | 13 |
func load(page: Int) -> Single<NetworkArrayData<GroupItem>> |
14 | 14 |
func remove(groupId: String) -> Completable |
15 | 15 |
func join(type: QRType, parameter: Parameter) -> Single<GroupItem> |
16 |
- func create(groupName: String, avatar: String) -> Single<GroupItem> |
|
16 |
+ func create(group_name: String, avatar: String) -> Single<GroupItem> |
|
17 | 17 |
} |
@@ -26,7 +26,7 @@ struct PhotoGroupRepository: GroupRepository { |
||
26 | 26 |
return groupRemoteAPI.remove(groupId: groupId) |
27 | 27 |
} |
28 | 28 |
|
29 |
- func create(groupName: String, avatar: String) -> Single<GroupItem> { |
|
30 |
- return groupRemoteAPI.create(groupName: groupName, avatar: avatar) |
|
29 |
+ func create(group_name: String, avatar: String) -> Single<GroupItem> { |
|
30 |
+ return groupRemoteAPI.create(group_name: group_name, avatar: avatar) |
|
31 | 31 |
} |
32 | 32 |
} |
@@ -35,7 +35,7 @@ struct GroupDetailRemoteAPI { |
||
35 | 35 |
} |
36 | 36 |
|
37 | 37 |
func lock() -> Completable { |
38 |
- let lockResource = StatusResource(path: .groupLock, |
|
38 |
+ let lockResource = StatusResource(path: .group_lock, |
|
39 | 39 |
parameter: ["user_id": ShareUserId, "group_id": groupId]) |
40 | 40 |
return lockResource.getStatus() |
41 | 41 |
} |
@@ -58,7 +58,7 @@ struct GroupDetailRemoteAPI { |
||
58 | 58 |
let updateResource = StatusResource(path: .groupUpdate, |
59 | 59 |
parameter: ["admin_id": ShareUserId, |
60 | 60 |
"group_id": groupId, |
61 |
- "groupName": name]) |
|
61 |
+ "group_name": name]) |
|
62 | 62 |
return updateResource.getStatus() |
63 | 63 |
} |
64 | 64 |
} |
@@ -39,10 +39,10 @@ struct GroupRemoteAPI { |
||
39 | 39 |
return resource.loadContent() |
40 | 40 |
} |
41 | 41 |
|
42 |
- func create(groupName: String, avatar: String) -> Single<GroupItem> { |
|
42 |
+ func create(group_name: String, avatar: String) -> Single<GroupItem> { |
|
43 | 43 |
let createResource = ContentResource<GroupItem>(path: .groupCreate, |
44 | 44 |
parameter: ["user_id": ShareUserId, |
45 |
- "groupName": groupName, |
|
45 |
+ "group_name": group_name, |
|
46 | 46 |
"group_default_avatar": avatar], |
47 | 47 |
parseJSON: parseGroup) |
48 | 48 |
return createResource.loadContent() |
@@ -36,7 +36,7 @@ public enum Interfaces: String { |
||
36 | 36 |
//群详情 |
37 | 37 |
case groupDetail = "/g/detail" |
38 | 38 |
case groupUpdate = "/g/update" |
39 |
- case groupLock = "/g/lock" |
|
39 |
+ case group_lock = "/g/lock" |
|
40 | 40 |
case groupUnlock = "/g/unlock" |
41 | 41 |
case groupQuit = "/g/quit" |
42 | 42 |
|
@@ -27,9 +27,9 @@ public class GroupDetailViewModel { |
||
27 | 27 |
public let didQuit = PublishSubject<Void>() |
28 | 28 |
public let item: BehaviorRelay<GroupDetailItem> |
29 | 29 |
|
30 |
- public var groupName: Observable<String> { |
|
30 |
+ public var group_name: Observable<String> { |
|
31 | 31 |
return item.asObservable().flatMapLatest({ (item) -> Observable<String> in |
32 |
- return Observable.just(item.group.groupName) |
|
32 |
+ return Observable.just(item.group.group_name) |
|
33 | 33 |
}) |
34 | 34 |
} |
35 | 35 |
|
@@ -51,9 +51,9 @@ public class GroupDetailViewModel { |
||
51 | 51 |
}) |
52 | 52 |
} |
53 | 53 |
|
54 |
- public var groupLock: Observable<Bool> { |
|
54 |
+ public var group_lock: Observable<Bool> { |
|
55 | 55 |
return item.asObservable().flatMapLatest({ (item) -> Observable<Bool> in |
56 |
- return Observable.just(item.group.groupLock) |
|
56 |
+ return Observable.just(item.group.group_lock) |
|
57 | 57 |
}) |
58 | 58 |
} |
59 | 59 |
|
@@ -69,14 +69,14 @@ public class GroupDetailViewModel { |
||
69 | 69 |
if isLock { |
70 | 70 |
repository.lock().subscribe(onCompleted: { |
71 | 71 |
var val = self.item.value |
72 |
- val.group.groupLock = true |
|
72 |
+ val.group.group_lock = true |
|
73 | 73 |
self.item.accept(val) |
74 | 74 |
Toast.show(message: "群已锁定") |
75 | 75 |
}).disposed(by: disposeBag) |
76 | 76 |
} else { |
77 | 77 |
repository.unlock().subscribe(onCompleted: { |
78 | 78 |
var val = self.item.value |
79 |
- val.group.groupLock = false |
|
79 |
+ val.group.group_lock = false |
|
80 | 80 |
Toast.show(message: "群未锁定") |
81 | 81 |
}).disposed(by: disposeBag) |
82 | 82 |
} |
@@ -112,7 +112,7 @@ public class GroupDetailViewModel { |
||
112 | 112 |
.subscribe(onCompleted: {[unowned self] in |
113 | 113 |
Toast.show(message: "群名称已修改") |
114 | 114 |
var val = self.item.value |
115 |
- val.group.groupName = name |
|
115 |
+ val.group.group_name = name |
|
116 | 116 |
self.item.accept(val) |
117 | 117 |
|
118 | 118 |
let userInfo = [GroupItemsOperator.key: GroupItemsOperator.update(val.group_id, val.group)] |
@@ -28,15 +28,15 @@ public class GroupViewModel { |
||
28 | 28 |
|
29 | 29 |
public var groupItem: BehaviorRelay<GroupItem> |
30 | 30 |
|
31 |
- public var groupName: Observable<String> { |
|
31 |
+ public var group_name: Observable<String> { |
|
32 | 32 |
return groupItem.asObservable().flatMapLatest({ (item) -> Observable<String> in |
33 |
- return Observable.just(item.groupName) |
|
33 |
+ return Observable.just(item.group_name) |
|
34 | 34 |
}) |
35 | 35 |
} |
36 | 36 |
|
37 |
- public var groupAvatar: Observable<String> { |
|
37 |
+ public var group_avatar: Observable<String> { |
|
38 | 38 |
return groupItem.asObservable().flatMapLatest({ (item) -> Observable<String> in |
39 |
- return Observable.just("Group\(item.groupDefaultAvatar)") |
|
39 |
+ return Observable.just("Group\(item.group_default_avatar)") |
|
40 | 40 |
}) |
41 | 41 |
} |
42 | 42 |
|
@@ -116,7 +116,7 @@ public class GroupViewModel { |
||
116 | 116 |
var items = self._items.value |
117 | 117 |
items = items.map({ item in |
118 | 118 |
var tmp = item |
119 |
- tmp.groupName = val.groupName |
|
119 |
+ tmp.group_name = val.group_name |
|
120 | 120 |
return tmp |
121 | 121 |
}) |
122 | 122 |
self._items.accept(items) |
@@ -40,7 +40,7 @@ public final class CreateGroupViewModel { |
||
40 | 40 |
|
41 | 41 |
public func createGroup() { |
42 | 42 |
Toast.showActivity(message: "正在创建群") |
43 |
- return repository.create(groupName: name, avatar: "\(mappingIndex)") |
|
43 |
+ return repository.create(group_name: name, avatar: "\(mappingIndex)") |
|
44 | 44 |
.subscribe(onSuccess: {[unowned self] item in |
45 | 45 |
Toast.show(message: "照片分享群已创建") |
46 | 46 |
self.delegate?.navigateToGroup(item) |
@@ -112,7 +112,7 @@ public class HomeViewModel { |
||
112 | 112 |
|
113 | 113 |
if item.group_id == groupId { |
114 | 114 |
var tmp = item |
115 |
- tmp.groupName = val.groupName |
|
115 |
+ tmp.group_name = val.group_name |
|
116 | 116 |
|
117 | 117 |
return tmp |
118 | 118 |
} |
@@ -29,7 +29,7 @@ public final class PhotoDetailItemViewModel { |
||
29 | 29 |
self.repository = PhotoDetailRepository(photoId: photoItem.photo_id, groupId: photoItem.group_id) |
30 | 30 |
self.loadCommentItems().concat(self.loadThumbupUserItems()).subscribe(onCompleted: { |
31 | 31 |
var val = self.item.value |
32 |
- val.commentNum = self.commentItems.value.count |
|
32 |
+ val.comment_num = self.commentItems.value.count |
|
33 | 33 |
val.thumbup_num = self.thumbupItems.value.count |
34 | 34 |
self.item.accept(val) |
35 | 35 |
|
@@ -36,15 +36,15 @@ public final class PhotoDetailViewModel { |
||
36 | 36 |
}) |
37 | 37 |
} |
38 | 38 |
|
39 |
- public var groupName: Observable<String> { |
|
39 |
+ public var group_name: Observable<String> { |
|
40 | 40 |
return itemViewModel.item.map({ val in |
41 |
- return val.groupName |
|
41 |
+ return val.group_name |
|
42 | 42 |
}) |
43 | 43 |
} |
44 | 44 |
|
45 |
- public var groupAvatar: Observable<Int> { |
|
45 |
+ public var group_avatar: Observable<Int> { |
|
46 | 46 |
return itemViewModel.item.map({ val in |
47 |
- return val.groupDefaultAvatar |
|
47 |
+ return val.group_default_avatar |
|
48 | 48 |
}) |
49 | 49 |
} |
50 | 50 |
|
@@ -1,58 +0,0 @@ |
||
1 |
-// |
|
2 |
-// CLLocationExt.swift |
|
3 |
-// PaiaiUIKit |
|
4 |
-// |
|
5 |
-// Created by FFIB on 2017/9/24. |
|
6 |
-// Copyright © 2017年 FFIB. All rights reserved. |
|
7 |
-// |
|
8 |
- |
|
9 |
-import UIKit |
|
10 |
-import CoreLocation |
|
11 |
-let a = 6378245.0 |
|
12 |
-let ee = 0.00669342162296594323 |
|
13 |
-//the world coordinate transformation to mars |
|
14 |
-extension CLLocation { |
|
15 |
- public func transformationWorldCoordinateToMars() -> CLLocationCoordinate2D { |
|
16 |
- let lat = coordinate.latitude |
|
17 |
- let lon = coordinate.longitude |
|
18 |
- if outOfChina() { |
|
19 |
- return coordinate |
|
20 |
- } |
|
21 |
- var dLat = transformLatWithX(x: lon - 105.0, y: lat - 35.0) |
|
22 |
- var dLon = transformLonWithY(x: lon - 105.0, y: lat - 35.0) |
|
23 |
- let radLat = lat / 180.0 * .pi |
|
24 |
- var magic = sin(radLat) |
|
25 |
- magic = 1 - ee * magic * magic |
|
26 |
- let sqrtMagic = sqrt(magic) |
|
27 |
- dLat = (dLat * 180.0) / ((a * (1 - ee)) / (magic * sqrtMagic) * .pi) |
|
28 |
- dLon = (dLon * 180.0) / (a / sqrtMagic * cos(radLat) * .pi) |
|
29 |
- return CLLocationCoordinate2DMake(dLat + coordinate.latitude, dLon + coordinate.longitude) |
|
30 |
- } |
|
31 |
- |
|
32 |
- //judge china |
|
33 |
- public func outOfChina() -> Bool { |
|
34 |
- guard case 72.005..<137.8347 = coordinate.longitude else { |
|
35 |
- return true |
|
36 |
- } |
|
37 |
- guard case 0.8293..<55.8271 = coordinate.latitude else { |
|
38 |
- return true |
|
39 |
- } |
|
40 |
- return false |
|
41 |
- } |
|
42 |
- |
|
43 |
- public func transformLatWithX(x: Double, y: Double) -> Double { |
|
44 |
- var ret = -100.0 + 2.0 * x + 3.0 * y + 0.2 * y * y + 0.1 * x * y + 0.2 * sqrt(abs(x)) |
|
45 |
- ret += (20.0 * sin(6.0 * x * .pi) + 20.0 * sin(2.0 * x * .pi)) * 2.0 / 3.0 |
|
46 |
- ret += (20.0 * sin(y * .pi) + 40.0 * sin(y / 3.0 * .pi)) * 2.0 / 3.0 |
|
47 |
- ret += (160.0 * sin(y / 12.0 * .pi) + 320.0 * sin(y * .pi / 30.0)) * 2.0 / 3.0 |
|
48 |
- return ret |
|
49 |
- } |
|
50 |
- |
|
51 |
- public func transformLonWithY(x: Double, y: Double) -> Double { |
|
52 |
- var ret = 300.0 + x + 2.0 * y + 0.1 * x * x + 0.1 * x * y + 0.1 * sqrt(abs(x)) |
|
53 |
- ret += (20.0 * sin(6.0 * x * .pi) + 20.0 * sin(2.0 * x * .pi)) * 2.0 / 3.0 |
|
54 |
- ret += (20.0 * sin(x * .pi) + 40.0 * sin(x / 3.0 * .pi)) * 2.0 / 3.0 |
|
55 |
- ret += (150.0 * sin(x / 12.0 * .pi) + 300.0 * sin(x / 30.0 * .pi)) * 2.0 / 3.0 |
|
56 |
- return ret |
|
57 |
- } |
|
58 |
-} |
@@ -10,8 +10,9 @@ import UIKit |
||
10 | 10 |
|
11 | 11 |
extension UIColor { |
12 | 12 |
|
13 |
- public convenience init(r: CGFloat, g: CGFloat, b: CGFloat, a: CGFloat = 1) { |
|
14 |
- self.init(red: r / 255.0, green: g / 255.0, blue: b / 255.0, alpha: a) |
|
13 |
+ //swiftlint:disable identifier_name |
|
14 |
+ public convenience init(r: CGFloat, g: CGFloat, b: CGFloat, alpha: CGFloat = 1) { |
|
15 |
+ self.init(red: r / 255.0, green: g / 255.0, blue: b / 255.0, alpha: alpha) |
|
15 | 16 |
} |
16 | 17 |
|
17 | 18 |
public convenience init?(hexString: String, alpha: CGFloat = 1.0) { |
@@ -26,8 +27,8 @@ extension UIColor { |
||
26 | 27 |
self.init(red: red, green: green, blue: blue, alpha: alpha) |
27 | 28 |
} |
28 | 29 |
|
29 |
- public convenience init(gray: CGFloat, a: CGFloat = 1) { |
|
30 |
- self.init(red: gray / 255.0, green: gray / 255.0, blue: gray / 255.0, alpha: a) |
|
30 |
+ public convenience init(gray: CGFloat, alpha: CGFloat = 1) { |
|
31 |
+ self.init(red: gray / 255.0, green: gray / 255.0, blue: gray / 255.0, alpha: alpha) |
|
31 | 32 |
} |
32 | 33 |
|
33 | 34 |
} |
@@ -149,12 +149,11 @@ extension UIView { |
||
149 | 149 |
|
150 | 150 |
extension UIView { |
151 | 151 |
func getSuperViewController() -> UIViewController? { |
152 |
- var nr = next |
|
153 |
- while let r = nr { |
|
154 |
- if let vc = r as? UIViewController { return vc } |
|
155 |
- nr = r.next |
|
152 |
+ var nextResp = next |
|
153 |
+ while let resp = nextResp { |
|
154 |
+ if let vc = resp as? UIViewController { return vc } |
|
155 |
+ nextResp = resp.next |
|
156 | 156 |
} |
157 |
- |
|
158 | 157 |
return nil |
159 | 158 |
} |
160 | 159 |
} |
@@ -50,7 +50,7 @@ open class AlertViewController: UIViewController, PresentViewController { |
||
50 | 50 |
|
51 | 51 |
override open func viewDidLoad() { |
52 | 52 |
super.viewDidLoad() |
53 |
- view.backgroundColor = UIColor(gray: 52, a: 0) |
|
53 |
+ view.backgroundColor = UIColor(gray: 52, alpha: 0) |
|
54 | 54 |
configurationGestures() |
55 | 55 |
|
56 | 56 |
} |
@@ -1,121 +0,0 @@ |
||
1 |
-// |
|
2 |
-// ActionSheetView.swift |
|
3 |
-// PaiaiUIKit |
|
4 |
-// |
|
5 |
-// Created by FFIB on 2017/11/17. |
|
6 |
-// Copyright © 2017年 FFIB. All rights reserved. |
|
7 |
-// |
|
8 |
- |
|
9 |
-import UIKit |
|
10 |
- |
|
11 |
-public final class ActionSheetView: UIView { |
|
12 |
- public static var `default`: ActionSheetView { |
|
13 |
- return ActionSheetView() |
|
14 |
- } |
|
15 |
- |
|
16 |
- private typealias ButtonAction = ((AlertAction) -> Void) |
|
17 |
- |
|
18 |
- public private(set) var alertActions: [AlertAction] = [] |
|
19 |
- public private(set) var cancelAction: AlertAction? |
|
20 |
- private var _cancelItem: AlertItem? |
|
21 |
- private var _alertItems: [AlertItem] = [] |
|
22 |
- |
|
23 |
- private var actions: [ButtonAction] = [] |
|
24 |
- private var viewNotReady = true |
|
25 |
- |
|
26 |
- var title: String = "" |
|
27 |
- var message: String = "" |
|
28 |
- |
|
29 |
- override public func didMoveToWindow() { |
|
30 |
- super.didMoveToWindow() |
|
31 |
- guard viewNotReady else { return } |
|
32 |
- constructViewHierarchy() |
|
33 |
- activateConstraints() |
|
34 |
- backgroundColor = UIColor(r: 153, g: 153, b: 153) |
|
35 |
- viewNotReady = false |
|
36 |
- } |
|
37 |
- |
|
38 |
- private func constructViewHierarchy() { |
|
39 |
- for item in _alertItems { addSubview(item) } |
|
40 |
- |
|
41 |
- guard let item = _cancelItem else { return } |
|
42 |
- addSubview(item) |
|
43 |
- } |
|
44 |
- |
|
45 |
- private func activateConstraints() { |
|
46 |
- activateConstraintsCancelItem() |
|
47 |
- activateConstraintsItems() |
|
48 |
- activateConstraintsRootView() |
|
49 |
- } |
|
50 |
- |
|
51 |
- func addAlertAction(_ action: AlertAction) { |
|
52 |
- switch action.style { |
|
53 |
- case .default, .custom: |
|
54 |
- alertActions.append(action) |
|
55 |
- _alertItems.append(action.style.item) |
|
56 |
- case .cancel: |
|
57 |
- cancelAction = action |
|
58 |
- _cancelItem = action.style.item |
|
59 |
- } |
|
60 |
- } |
|
61 |
-} |
|
62 |
- |
|
63 |
-/// MARK: |
|
64 |
-fileprivate extension ActionSheetView { |
|
65 |
- func activateConstraintsRootView() { |
|
66 |
- guard let v = superview else { return } |
|
67 |
- translatesAutoresizingMaskIntoConstraints = false |
|
68 |
- |
|
69 |
- NSLayoutConstraint.activate([ |
|
70 |
- bottomAnchor.constraint(equalTo: v.bottomAnchor), |
|
71 |
- leadingAnchor.constraint(equalTo: v.leadingAnchor), |
|
72 |
- trailingAnchor.constraint(equalTo: v.trailingAnchor) |
|
73 |
- ]) |
|
74 |
- } |
|
75 |
- |
|
76 |
- func activateConstraintsCancelItem() { |
|
77 |
- guard let alertAction = cancelAction, |
|
78 |
- let cancelItem = _cancelItem else { return } |
|
79 |
- cancelItem.translatesAutoresizingMaskIntoConstraints = false |
|
80 |
- cancelItem.setAttributedTitle(alertAction.attributedTitle, for: .normal) |
|
81 |
- |
|
82 |
- NSLayoutConstraint.activate([ |
|
83 |
- cancelItem.heightAnchor.constraint(equalToConstant: 44), |
|
84 |
- cancelItem.leadingAnchor.constraint(equalTo: leadingAnchor), |
|
85 |
- cancelItem.trailingAnchor.constraint(equalTo: trailingAnchor), |
|
86 |
- cancelItem.bottomAnchor.constraint(equalTo: bottomAnchor) |
|
87 |
- ]) |
|
88 |
- } |
|
89 |
- |
|
90 |
- func activateConstraintsItems() { |
|
91 |
- guard !alertActions.isEmpty else { return } |
|
92 |
- var last: UIButton? = _cancelItem |
|
93 |
- var bottom: CGFloat = _cancelItem == nil ? 0 : -6 |
|
94 |
- for (alertAction, item) in zip(alertActions, _alertItems).reversed() { |
|
95 |
- item.translatesAutoresizingMaskIntoConstraints = false |
|
96 |
- item.setAttributedTitle(alertAction.attributedTitle, for: .normal) |
|
97 |
- NSLayoutConstraint.activate([ |
|
98 |
- item.heightAnchor.constraint(equalToConstant: 44), |
|
99 |
- item.leadingAnchor.constraint(equalTo: leadingAnchor), |
|
100 |
- item.trailingAnchor.constraint(equalTo: trailingAnchor), |
|
101 |
- item.bottomAnchor.constraint(equalTo: last?.topAnchor ?? bottomAnchor, constant: bottom) |
|
102 |
- ]) |
|
103 |
- last = item |
|
104 |
- bottom = -1 |
|
105 |
- } |
|
106 |
- NSLayoutConstraint.activate([topAnchor.constraint(equalTo: last!.topAnchor)]) |
|
107 |
- } |
|
108 |
-} |
|
109 |
- |
|
110 |
-fileprivate extension AlertAction.Style { |
|
111 |
- var item: AlertItem { |
|
112 |
- switch self { |
|
113 |
- case .cancel: |
|
114 |
- return BottomCancelItem() |
|
115 |
- case .default: |
|
116 |
- return BottomDefaultItem() |
|
117 |
- case let .custom(v): |
|
118 |
- return v |
|
119 |
- } |
|
120 |
- } |
|
121 |
-} |
@@ -1,78 +0,0 @@ |
||
1 |
-// |
|
2 |
-// AES.swift |
|
3 |
-// PaiAi |
|
4 |
-// |
|
5 |
-// Created by LISA on 2017/6/1. |
|
6 |
-// Copyright © 2017年 yb. All rights reserved. |
|
7 |
-// |
|
8 |
- |
|
9 |
-import UIKit |
|
10 |
- |
|
11 |
-private let key = "i29g8au38U3dI8dj" |
|
12 |
-private let iv = "a2k49g8wJ3F3kf9k" |
|
13 |
-// MARK: AES |
|
14 |
-extension Data { |
|
15 |
- fileprivate func AES(operation: CCOperation, key: String, iv: String) -> Data? { |
|
16 |
- var digest_length = Swift.max(self.count * 2, 16) |
|
17 |
- var digest = [UInt8](repeating: 0, count: digest_length) |
|
18 |
- |
|
19 |
- //AES encrypt |
|
20 |
- let status = CCCrypt(operation, CCAlgorithm(kCCAlgorithmAES128), |
|
21 |
- CCOptions(kCCOptionPKCS7Padding), |
|
22 |
- key.bytes, key.lengthOfBytes(using: .utf8), |
|
23 |
- iv.bytes, |
|
24 |
- self.arrayOfBytes(), self.arrayOfBytes().count, |
|
25 |
- &digest, digest.count, &digest_length) |
|
26 |
- |
|
27 |
- if status == CCCryptorStatus(kCCSuccess) { |
|
28 |
- return Data(bytes: digest, count: digest_length) |
|
29 |
- } |
|
30 |
- return nil |
|
31 |
- } |
|
32 |
- |
|
33 |
- func AES128EncryptToData() -> Data { |
|
34 |
- return self.AES(operation: CCOperation(kCCEncrypt), key: key, iv: iv)! |
|
35 |
- } |
|
36 |
- func AES128EncryptToBase64Data() -> Data { |
|
37 |
- return self.AES128EncryptToData().base64EncodedData() |
|
38 |
- } |
|
39 |
- func AES128EncryptToBase64String() -> String { |
|
40 |
- return self.AES128EncryptToData().base64EncodedString() |
|
41 |
- } |
|
42 |
- func AES128DecryptFromBase64DataToData() -> Data { |
|
43 |
- return Data(base64Encoded: self)!.AES128DecryptToData() |
|
44 |
- } |
|
45 |
- func AES128DecryptFromBase64DataToString() -> String { |
|
46 |
- return Data(base64Encoded: self)!.AES128DecryptToString() |
|
47 |
- } |
|
48 |
- func AES128DecryptToData() -> Data { |
|
49 |
- return self.AES(operation: CCOperation(kCCDecrypt), key: key, iv: iv)! |
|
50 |
- } |
|
51 |
- func AES128DecryptToString() -> String { |
|
52 |
- return String.init(data: self.AES128DecryptToData(), encoding: String.Encoding.utf8) ?? "" |
|
53 |
- } |
|
54 |
-} |
|
55 |
- |
|
56 |
-extension String { |
|
57 |
- |
|
58 |
- func AES128EncryptToData() -> Data { |
|
59 |
- |
|
60 |
- return self.myData.AES128EncryptToData() |
|
61 |
- } |
|
62 |
- func AES128EncryptToBase64Data() -> Data { |
|
63 |
- |
|
64 |
- return self.myData.AES128EncryptToBase64Data() |
|
65 |
- } |
|
66 |
- func AES128EncryptToBase64String() -> String { |
|
67 |
- |
|
68 |
- return self.myData.AES128EncryptToBase64String() |
|
69 |
- } |
|
70 |
- |
|
71 |
- func AES128DecryptFromBase64StringToData() -> Data { |
|
72 |
- return (Data(base64Encoded: self)?.AES128DecryptToData())! |
|
73 |
- } |
|
74 |
- |
|
75 |
- func AES128DecryptFromBase64StringToString() -> String { |
|
76 |
- return (Data(base64Encoded: self)?.AES128DecryptToString())! |
|
77 |
- } |
|
78 |
-} |
@@ -1,17 +0,0 @@ |
||
1 |
-// |
|
2 |
-// Data+bytes.swift |
|
3 |
-// PaiAi |
|
4 |
-// |
|
5 |
-// Created by LISA on 2017/6/1. |
|
6 |
-// Copyright © 2017年 yb. All rights reserved. |
|
7 |
-// |
|
8 |
- |
|
9 |
-import UIKit |
|
10 |
-extension Data { |
|
11 |
- public func arrayOfBytes() -> [UInt8] { |
|
12 |
- let count = self.count / MemoryLayout<UInt8>.size |
|
13 |
- var bytesArray = [UInt8](repeating: 0, count: count) |
|
14 |
- (self as NSData).getBytes(&bytesArray, length: count * MemoryLayout<UInt8>.size) |
|
15 |
- return bytesArray |
|
16 |
- } |
|
17 |
-} |
@@ -1,116 +0,0 @@ |
||
1 |
-// |
|
2 |
-// Digest.swift |
|
3 |
-// PaiAi |
|
4 |
-// |
|
5 |
-// Created by LISA on 2017/6/1. |
|
6 |
-// Copyright © 2017年 yb. All rights reserved. |
|
7 |
-// |
|
8 |
- |
|
9 |
-import UIKit |
|
10 |
- |
|
11 |
-enum EncryptionAlgorithm: CC_LONG { |
|
12 |
-// case md2 = 16 |
|
13 |
-// case md4 = 17 |
|
14 |
- case md5 = 16 |
|
15 |
- case sha1 = 20 |
|
16 |
- case sha224 = 28 |
|
17 |
- case sha256 = 32 |
|
18 |
- case sha384 = 48 |
|
19 |
- case sha512 = 64 |
|
20 |
- |
|
21 |
-} |
|
22 |
- |
|
23 |
-extension Data { |
|
24 |
- public var bytes: UnsafePointer<UInt8> { |
|
25 |
- return self.withUnsafeBytes({ (pointer: UnsafePointer<UInt8>) -> UnsafePointer<UInt8> in |
|
26 |
- return pointer |
|
27 |
- }) |
|
28 |
- } |
|
29 |
-} |
|
30 |
- |
|
31 |
-// MARK: md and sha |
|
32 |
-extension Data { |
|
33 |
- |
|
34 |
- fileprivate func digestAlgorithm(algorithm: EncryptionAlgorithm) ->UnsafeMutablePointer<CUnsignedChar> { |
|
35 |
- let strlen = CC_LONG(16) |
|
36 |
- switch algorithm { |
|
37 |
-// case .md2: |
|
38 |
-// let digest = UnsafeMutablePointer<CUnsignedChar>.allocate(capacity: Int(CC_MD2_DIGEST_LENGTH)) |
|
39 |
-// CC_MD2(self.bytes, strlen, digest) |
|
40 |
-// return digest |
|
41 |
-// case .md4: |
|
42 |
-// let digest = UnsafeMutablePointer<CUnsignedChar>.allocate(capacity: Int(CC_MD4_DIGEST_LENGTH)) |
|
43 |
-// CC_MD4(self.bytes, strlen, digest) |
|
44 |
-// return digest |
|
45 |
- case .md5: |
|
46 |
- let digest = UnsafeMutablePointer<CUnsignedChar>.allocate(capacity: Int(CC_MD5_DIGEST_LENGTH)) |
|
47 |
- CC_MD5(self.bytes, strlen, digest) |
|
48 |
- return digest |
|
49 |
- case .sha1: |
|
50 |
- let digest = UnsafeMutablePointer<CUnsignedChar>.allocate(capacity: Int(CC_SHA1_DIGEST_LENGTH)) |
|
51 |
- CC_SHA1(self.bytes, strlen, digest) |
|
52 |
- return digest |
|
53 |
- case .sha224: |
|
54 |
- let digest = UnsafeMutablePointer<CUnsignedChar>.allocate(capacity: Int(CC_SHA224_DIGEST_LENGTH)) |
|
55 |
- CC_SHA224(self.bytes, strlen, digest) |
|
56 |
- return digest |
|
57 |
- case .sha256: |
|
58 |
- let digest = UnsafeMutablePointer<CUnsignedChar>.allocate(capacity: Int(CC_SHA256_DIGEST_LENGTH)) |
|
59 |
- CC_SHA256(self.bytes, strlen, digest) |
|
60 |
- return digest |
|
61 |
- case .sha384: |
|
62 |
- let digest = UnsafeMutablePointer<CUnsignedChar>.allocate(capacity: Int(CC_SHA384_DIGEST_LENGTH)) |
|
63 |
- CC_SHA384(self.bytes, strlen, digest) |
|
64 |
- return digest |
|
65 |
- case .sha512: |
|
66 |
- let digest = UnsafeMutablePointer<CUnsignedChar>.allocate(capacity: Int(CC_SHA512_DIGEST_LENGTH)) |
|
67 |
- CC_SHA512(self.bytes, strlen, digest) |
|
68 |
- return digest |
|
69 |
- } |
|
70 |
- } |
|
71 |
- |
|
72 |
- //return the string |
|
73 |
- func digestString(algorithm: EncryptionAlgorithm) -> String { |
|
74 |
- let length = algorithm.rawValue |
|
75 |
- let digest = digestAlgorithm(algorithm: algorithm) |
|
76 |
- |
|
77 |
- var outStr = "" |
|
78 |
- for i in 0..<Int(length) { |
|
79 |
- outStr = outStr.appendingFormat("%02x", digest[i]) |
|
80 |
- } |
|
81 |
- return outStr.uppercased() |
|
82 |
- } |
|
83 |
- //return the data |
|
84 |
- func digestData(algorithm: EncryptionAlgorithm) -> Data { |
|
85 |
- let str = digestString(algorithm: algorithm) |
|
86 |
- return str.data(using: String.Encoding.utf8)! |
|
87 |
- } |
|
88 |
- |
|
89 |
- func digestBase64Data(algorithm: EncryptionAlgorithm) -> Data { |
|
90 |
- return digestData(algorithm: algorithm).base64EncodedData() |
|
91 |
- } |
|
92 |
- |
|
93 |
- func digestBase64String(algorithm: EncryptionAlgorithm) -> String { |
|
94 |
- return digestData(algorithm: algorithm).base64EncodedString() |
|
95 |
- } |
|
96 |
-} |
|
97 |
- |
|
98 |
-extension String { |
|
99 |
- //return the stringx |
|
100 |
- func digestString(algorithm: EncryptionAlgorithm) -> String { |
|
101 |
- return self.myData.digestString(algorithm: algorithm) |
|
102 |
- } |
|
103 |
- //return the data |
|
104 |
- func digestData(algorithm: EncryptionAlgorithm) -> Data { |
|
105 |
- return self.myData.digestData(algorithm: algorithm) |
|
106 |
- } |
|
107 |
- |
|
108 |
- func digestBase64Data(algorithm: EncryptionAlgorithm) -> Data { |
|
109 |
- return self.myData.digestBase64Data(algorithm: algorithm) |
|
110 |
- } |
|
111 |
- |
|
112 |
- func digestBase64String(algorithm: EncryptionAlgorithm) -> String { |
|
113 |
- return self.myData.digestBase64String(algorithm: algorithm) |
|
114 |
- |
|
115 |
- } |
|
116 |
-} |
@@ -1,128 +0,0 @@ |
||
1 |
-// |
|
2 |
-// Data+Encryption.swift |
|
3 |
-// Function |
|
4 |
-// |
|
5 |
-// Created by mac on 2016/11/9. |
|
6 |
-// Copyright © 2016年 mac. All rights reserved. |
|
7 |
-// |
|
8 |
- |
|
9 |
-import UIKit |
|
10 |
- |
|
11 |
-// MARK: RSA encrypt |
|
12 |
-extension Data { |
|
13 |
- fileprivate func rsa_publickey_form_data(keyData: Data) -> SecKey? { |
|
14 |
- if let certificate = SecCertificateCreateWithData(kCFAllocatorDefault, keyData as CFData) { |
|
15 |
- let policy = SecPolicyCreateBasicX509() |
|
16 |
- var trust: SecTrust? |
|
17 |
- if SecTrustCreateWithCertificates(certificate, policy, &trust) == errSecSuccess { |
|
18 |
- var trustResultType: SecTrustResultType = SecTrustResultType.invalid |
|
19 |
- if SecTrustEvaluate(trust!, &trustResultType) == errSecSuccess { |
|
20 |
- return SecTrustCopyPublicKey(trust!)! |
|
21 |
- } |
|
22 |
- } |
|
23 |
- } |
|
24 |
- return nil |
|
25 |
- } |
|
26 |
- |
|
27 |
- fileprivate func rsa_privatekey_from_data(keyData: Data, withPassword password: String) -> SecKey? { |
|
28 |
- var privateKey: SecKey? |
|
29 |
- let options: [String: String] = [kSecImportExportPassphrase as String: password] |
|
30 |
- var items: CFArray? |
|
31 |
- if SecPKCS12Import(keyData as CFData, options as CFDictionary, &items) == errSecSuccess { |
|
32 |
- if CFArrayGetCount(items) > 0 { |
|
33 |
- let d = unsafeBitCast(CFArrayGetValueAtIndex(items, 0), to: CFDictionary.self) |
|
34 |
- let k = Unmanaged.passUnretained(kSecImportItemIdentity).toOpaque() |
|
35 |
- let v = CFDictionaryGetValue(d, k) |
|
36 |
- let secIdentity = unsafeBitCast(v, to: SecIdentity.self) |
|
37 |
- if SecIdentityCopyPrivateKey(secIdentity, &privateKey) == errSecSuccess { |
|
38 |
- return privateKey |
|
39 |
- } |
|
40 |
- } |
|
41 |
- } |
|
42 |
- return nil |
|
43 |
- } |
|
44 |
- fileprivate func RSA(operation: String, key: SecKey) -> Data? { |
|
45 |
- let key_size = SecKeyGetBlockSize(key) |
|
46 |
- var encrypt_bytes = [UInt8](repeating: 0, count: key_size) |
|
47 |
- var output_size = key_size |
|
48 |
- if operation == "encrypt" { |
|
49 |
- if SecKeyEncrypt(key, SecPadding.PKCS1, |
|
50 |
- self.bytes, self.count, |
|
51 |
- &encrypt_bytes, &output_size) == errSecSuccess { |
|
52 |
- return Data(bytes: encrypt_bytes, count: output_size) |
|
53 |
- } |
|
54 |
- } else { |
|
55 |
- let stauts = SecKeyDecrypt(key, SecPadding.PKCS1, |
|
56 |
- self.bytes, self.count, |
|
57 |
- &encrypt_bytes, &output_size) |
|
58 |
- if stauts == errSecSuccess { |
|
59 |
- return Data(bytes: UnsafePointer<UInt8>(encrypt_bytes), count: output_size) |
|
60 |
- } |
|
61 |
- } |
|
62 |
- |
|
63 |
- return nil |
|
64 |
- } |
|
65 |
- |
|
66 |
- func RSAEncryptToData(publicKeyPath: String) -> Data { |
|
67 |
- let publicKey = try? Data(contentsOf: URL(fileURLWithPath: publicKeyPath)) |
|
68 |
- let publickeyData = rsa_publickey_form_data(keyData: publicKey!) |
|
69 |
- return RSA(operation: "encrypt", key: publickeyData!)! |
|
70 |
- } |
|
71 |
- |
|
72 |
- func RSAEncryptToBase64Data(publicKeyPath: String) -> Data { |
|
73 |
- return RSAEncryptToData(publicKeyPath: publicKeyPath).base64EncodedData() |
|
74 |
- } |
|
75 |
- |
|
76 |
- func RSAEncryptToBase64String(publicKeyPath: String) -> String { |
|
77 |
- return RSAEncryptToData(publicKeyPath: publicKeyPath).base64EncodedString() |
|
78 |
- } |
|
79 |
- |
|
80 |
- mutating func RSADecryptFromBase64DataToData(privateKeyPath: String) -> Data { |
|
81 |
- self = Data.init(base64Encoded: self)! |
|
82 |
- return RSADecryptToData(privateKeyPath: privateKeyPath) |
|
83 |
- } |
|
84 |
- mutating func RSADecryptFromBase64DataToString(privateKeyPath: String) -> String { |
|
85 |
- self = Data.init(base64Encoded: self)! |
|
86 |
- return RSADecryptToString(privateKeyPath: privateKeyPath) |
|
87 |
- } |
|
88 |
- |
|
89 |
- func RSADecryptToData(privateKeyPath: String) -> Data { |
|
90 |
- let privateKey = try? Data(contentsOf: URL(fileURLWithPath: privateKeyPath)) |
|
91 |
- let privateKeyData = rsa_privatekey_from_data(keyData: privateKey!, withPassword: "5995267") |
|
92 |
- return RSA(operation: "decrypt", key: privateKeyData!)! |
|
93 |
- } |
|
94 |
- func RSADecryptToString(privateKeyPath: String) -> String { |
|
95 |
- return String(data: RSADecryptToData(privateKeyPath: privateKeyPath), encoding: String.Encoding.utf8)! |
|
96 |
- } |
|
97 |
-} |
|
98 |
- |
|
99 |
-extension String { |
|
100 |
- |
|
101 |
- func RSAEncryptToData(publicKeyPath: String) -> Data { |
|
102 |
- |
|
103 |
- return self.myData.RSAEncryptToData(publicKeyPath: publicKeyPath) |
|
104 |
- } |
|
105 |
- |
|
106 |
- func RSAEncryptToBase64Data(publicKeyPath: String) -> Data { |
|
107 |
- return self.myData.RSAEncryptToBase64Data(publicKeyPath: publicKeyPath) |
|
108 |
- } |
|
109 |
- |
|
110 |
- func RSAEncryptToBase64String(publicKeyPath: String) -> String { |
|
111 |
- return self.myData.RSAEncryptToBase64String(publicKeyPath: publicKeyPath) |
|
112 |
- } |
|
113 |
- |
|
114 |
- func RSADecryptFromBase64StringToData(privateKeyPath: String) -> Data { |
|
115 |
- return (Data(base64Encoded: self)?.RSADecryptToData(privateKeyPath: privateKeyPath))! |
|
116 |
- } |
|
117 |
- |
|
118 |
- func RSADecryptFromBase64StringToString(privateKeyPath: String) -> String { |
|
119 |
- return (Data(base64Encoded: self)?.RSADecryptToString(privateKeyPath: privateKeyPath))! |
|
120 |
- } |
|
121 |
- |
|
122 |
- func RSADecryptToData(privateKeyPath: String) -> Data { |
|
123 |
- return self.myData.RSADecryptToData(privateKeyPath: privateKeyPath) |
|
124 |
- } |
|
125 |
- func RSADecryptToString(privateKeyPath: String) -> String { |
|
126 |
- return self.myData.RSADecryptToString(privateKeyPath: privateKeyPath) |
|
127 |
- } |
|
128 |
-} |
@@ -1,29 +0,0 @@ |
||
1 |
-// |
|
2 |
-// String+bytes.swift |
|
3 |
-// PaiAi |
|
4 |
-// |
|
5 |
-// Created by LISA on 2017/6/1. |
|
6 |
-// Copyright © 2017年 yb. All rights reserved. |
|
7 |
-// |
|
8 |
- |
|
9 |
-import UIKit |
|
10 |
- |
|
11 |
-extension String { |
|
12 |
- public var bytes: UnsafeRawPointer { |
|
13 |
- let data = self.data(using: String.Encoding.utf8)! |
|
14 |
- return (data as NSData).bytes |
|
15 |
- } |
|
16 |
-} |
|
17 |
- |
|
18 |
-extension String { |
|
19 |
- public var myData: Data { |
|
20 |
- return self.data(using: String.Encoding.utf8)! |
|
21 |
- } |
|
22 |
-} |
|
23 |
- |
|
24 |
-extension String { |
|
25 |
- mutating func appendTimestamp() { |
|
26 |
- let timestamp = Int(Date().timeIntervalSince1970) |
|
27 |
- self.append("\(timestamp)") |
|
28 |
- } |
|
29 |
-} |
@@ -86,7 +86,7 @@ class NavigationBar: UINavigationBar { |
||
86 | 86 |
|
87 | 87 |
func getContentView() -> UIView? { |
88 | 88 |
for val in subviews { |
89 |
- if let ContentClass = NSClassFromString("_UINavigationBarContentView"), val.isKind(of: ContentClass) { |
|
89 |
+ if let contentClass = NSClassFromString("_UINavigationBarContentView"), val.isKind(of: contentClass) { |
|
90 | 90 |
return val |
91 | 91 |
} |
92 | 92 |
} |
@@ -9,34 +9,6 @@ |
||
9 | 9 |
import UIKit |
10 | 10 |
import CoreImage |
11 | 11 |
|
12 |
-extension NSObject { |
|
13 |
- static func curry<A, B, C, D, E, F>(f:@escaping (A, B, C, D, E) -> F) ->(A)->(B)->(C)->(D)->(E)->F { |
|
14 |
- return { |
|
15 |
- a in {b in {c in {d in {e in f(a, b, c, d, e) }}}} |
|
16 |
- } |
|
17 |
- } |
|
18 |
- static func curry<A, B, C, D, E>(f:@escaping (A, B, C, D) -> E) ->(A)->(B)->(C)->(D)->E { |
|
19 |
- return { |
|
20 |
- a in {b in {c in {d in f(a, b, c, d) }}} |
|
21 |
- } |
|
22 |
- } |
|
23 |
- static func curry<A, B, C, D>(f:@escaping (A, B, C) -> D) ->(A)->(B)->(C)->D { |
|
24 |
- return { |
|
25 |
- a in {b in {c in f(a, b, c) }} |
|
26 |
- } |
|
27 |
- } |
|
28 |
- static func curry<A, B, C>(f:@escaping (A, B) -> C) ->(A)->(B)->C { |
|
29 |
- return { |
|
30 |
- a in {b in f(a, b) } |
|
31 |
- } |
|
32 |
- } |
|
33 |
- static func curry<A, B>(f:@escaping (A) -> B) -> (A) -> B { |
|
34 |
- return { |
|
35 |
- a in f(a) |
|
36 |
- } |
|
37 |
- } |
|
38 |
-} |
|
39 |
- |
|
40 | 12 |
public extension UIImage { |
41 | 13 |
//init with qr code string |
42 | 14 |
|
@@ -53,7 +53,7 @@ import CoreImage |
||
53 | 53 |
height: bounds.height)) |
54 | 54 |
guard let view = qrmaskView else { return } |
55 | 55 |
view.configuration = configuration |
56 |
- view.backgroundColor = UIColor(r: 0, g: 0, b: 0, a: 0.2) |
|
56 |
+ view.backgroundColor = UIColor(r: 0, g: 0, b: 0, alpha: 0.2) |
|
57 | 57 |
addSubview(view) |
58 | 58 |
} |
59 | 59 |
|
@@ -29,7 +29,7 @@ open class SideViewController: UIViewController, PresentViewController { |
||
29 | 29 |
override open func viewDidLoad() { |
30 | 30 |
super.viewDidLoad() |
31 | 31 |
view.isUserInteractionEnabled = true |
32 |
- view.backgroundColor = UIColor(gray: 52, a: 0) |
|
32 |
+ view.backgroundColor = UIColor(gray: 52, alpha: 0) |
|
33 | 33 |
configurationGestures() |
34 | 34 |
} |
35 | 35 |
|
@@ -49,7 +49,7 @@ public final class WaterfallFlowLayout: UICollectionViewLayout { |
||
49 | 49 |
let attributes = UICollectionViewLayoutAttributes(forCellWith: indexPath) |
50 | 50 |
attributes.frame = CGRect(x: itemX, y: itemY, width: itemWidth, height: itemHeight) |
51 | 51 |
|
52 |
- setMinColumn(h: itemHeight) |
|
52 |
+ setMinColumn(height: itemHeight) |
|
53 | 53 |
return attributes |
54 | 54 |
} |
55 | 55 |
|
@@ -112,8 +112,8 @@ public final class WaterfallFlowLayout: UICollectionViewLayout { |
||
112 | 112 |
return itemWidth / itemOriginSize.width * itemOriginSize.height |
113 | 113 |
} |
114 | 114 |
|
115 |
- fileprivate func setMinColumn(h: CGFloat) { |
|
116 |
- minColumnHeight += h |
|
115 |
+ fileprivate func setMinColumn(height: CGFloat) { |
|
116 |
+ minColumnHeight += height |
|
117 | 117 |
columnHeights[minColumn] = minColumnHeight |
118 | 118 |
(minColumn, minColumnHeight) = columnHeights.enumerated().min(by: { $0.1 < $1.1 }) ?? (0, 0) |
119 | 119 |
} |
@@ -16,19 +16,16 @@ class GestureRecognizerProxy: NSObject, UIGestureRecognizerDelegate { |
||
16 | 16 |
} |
17 | 17 |
|
18 | 18 |
func gestureRecognizerShouldBegin(_ gestureRecognizer: UIGestureRecognizer) -> Bool { |
19 |
- guard let d = delegate else { return false } |
|
20 |
- return d.gestureRecognizerShouldBegin(gestureRecognizer) |
|
19 |
+ return delegate?.gestureRecognizerShouldBegin(gestureRecognizer) ?? false |
|
21 | 20 |
} |
22 | 21 |
|
23 | 22 |
func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldReceive touch: UITouch) -> Bool { |
24 |
- guard let d = delegate else { return false } |
|
25 |
- return d.gestureRecognizer(gestureRecognizer, shouldReceive: touch) |
|
23 |
+ return delegate?.gestureRecognizer(gestureRecognizer, shouldReceive: touch) ?? false |
|
26 | 24 |
} |
27 | 25 |
|
28 | 26 |
func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, |
29 | 27 |
shouldRecognizeSimultaneouslyWith otherGestureRecognizer: UIGestureRecognizer) -> Bool { |
30 |
- guard let d = delegate else { return false } |
|
31 |
- return d.gestureRecognizer(gestureRecognizer, shouldRecognizeSimultaneouslyWith: otherGestureRecognizer) |
|
28 |
+ return delegate?.gestureRecognizer(gestureRecognizer, shouldRecognizeSimultaneouslyWith: otherGestureRecognizer) ?? false //swiftlint:disable:this line_length |
|
32 | 29 |
} |
33 | 30 |
} |
34 | 31 |
|
@@ -1,19 +0,0 @@ |
||
1 |
-// |
|
2 |
-// NavigationBarDelegate.swift |
|
3 |
-// PaiaiUIKit |
|
4 |
-// |
|
5 |
-// Created by FFIB on 2019/1/30. |
|
6 |
-// Copyright © 2019 FFIB. All rights reserved. |
|
7 |
-// |
|
8 |
- |
|
9 |
-import UIKit |
|
10 |
- |
|
11 |
-public protocol NavigationBarDelegate: class { |
|
12 |
- func navigationBar(_ navigationBar: UINavigationBar, shouldPush item: UINavigationItem) -> Bool |
|
13 |
-} |
|
14 |
- |
|
15 |
-public extension NavigationBarDelegate { |
|
16 |
- func navigationBar(_ navigationBar: UINavigationBar, shouldPush item: UINavigationItem) -> Bool { |
|
17 |
- return true |
|
18 |
- } |
|
19 |
-} |
@@ -1,41 +0,0 @@ |
||
1 |
-// |
|
2 |
-// NavigationBarProxy.swift |
|
3 |
-// PaiaiUIKit |
|
4 |
-// |
|
5 |
-// Created by FFIB on 2019/1/30. |
|
6 |
-// Copyright © 2019 FFIB. All rights reserved. |
|
7 |
-// |
|
8 |
- |
|
9 |
-import UIKit |
|
10 |
- |
|
11 |
-class NavigationBarProxy: NSObject, UINavigationBarDelegate { |
|
12 |
- weak var delegate: NavigationBarDelegate? |
|
13 |
- |
|
14 |
- init(target: NavigationBarDelegate) { |
|
15 |
- delegate = target |
|
16 |
- } |
|
17 |
- |
|
18 |
- func navigationBar(_ navigationBar: UINavigationBar, shouldPush item: UINavigationItem) -> Bool { |
|
19 |
- guard let d = delegate else { return true } |
|
20 |
- return d.navigationBar(navigationBar, shouldPush: item) |
|
21 |
- } |
|
22 |
-} |
|
23 |
- |
|
24 |
-extension UINavigationBar { |
|
25 |
- private struct AssociatedKeys { |
|
26 |
- static var proxyKey = "NavigationBarProxyKey" |
|
27 |
- } |
|
28 |
- |
|
29 |
- private var proxy: NavigationBarProxy? { |
|
30 |
- get { return objc_getAssociatedObject(self, &AssociatedKeys.proxyKey) as? NavigationBarProxy } |
|
31 |
- set { objc_setAssociatedObject(self, |
|
32 |
- &AssociatedKeys.proxyKey, |
|
33 |
- newValue, |
|
34 |
- objc_AssociationPolicy.OBJC_ASSOCIATION_RETAIN_NONATOMIC) } |
|
35 |
- } |
|
36 |
- |
|
37 |
- func setDelegate<T: NavigationBarDelegate>(_ target: T) { |
|
38 |
- proxy = NavigationBarProxy(target: target) |
|
39 |
- delegate = proxy |
|
40 |
- } |
|
41 |
-} |
@@ -59,7 +59,7 @@ fileprivate extension GroupDetailViewController { |
||
59 | 59 |
} |
60 | 60 |
|
61 | 61 |
func bindViewModelToGroupName() { |
62 |
- viewModel.groupName.bind(to: groupNameLabel.rx.text).disposed(by: disposeBag) |
|
62 |
+ viewModel.group_name.bind(to: groupNameLabel.rx.text).disposed(by: disposeBag) |
|
63 | 63 |
} |
64 | 64 |
|
65 | 65 |
func bindViewModelToGroupMemberCount() { |
@@ -71,7 +71,7 @@ fileprivate extension GroupDetailViewController { |
||
71 | 71 |
} |
72 | 72 |
|
73 | 73 |
func bindViewModelToGroupLock() { |
74 |
- viewModel.groupLock.bind(to: groupLockSwitch.rx.value).disposed(by: disposeBag) |
|
74 |
+ viewModel.group_lock.bind(to: groupLockSwitch.rx.value).disposed(by: disposeBag) |
|
75 | 75 |
} |
76 | 76 |
|
77 | 77 |
func bindViewModelToGroupLockSwitch() { |
@@ -102,10 +102,10 @@ extension GroupDetailViewController { |
||
102 | 102 |
|
103 | 103 |
@IBAction func presentGroupQR(_ sender: UITapGestureRecognizer) { |
104 | 104 |
let groupItem = viewModel.item.value.group |
105 |
- let alert = AlertViewController(style: .custom(GroupQRView(groupName: groupItem.groupName, |
|
106 |
- groupAvatar: "Group\(groupItem.groupDefaultAvatar)", |
|
107 |
- groupQR: "https:pai.ai/g/\(groupItem.group_id)"), |
|
108 |
- AlertAnimator()) ) |
|
105 |
+ let qrView = GroupQRView(group_name: groupItem.group_name, |
|
106 |
+ group_avatar: "Group\(groupItem.group_default_avatar)", |
|
107 |
+ groupQR: "https:pai.ai/g/\(groupItem.group_id)") |
|
108 |
+ let alert = AlertViewController(style: .custom(qrView, AlertAnimator())) |
|
109 | 109 |
presentController(alert) |
110 | 110 |
} |
111 | 111 |
|
@@ -33,7 +33,7 @@ final class GroupNameModificationViewController: UIViewController { |
||
33 | 33 |
let leftView = UIView(frame: CGRect(x: 0, y: 0, width: 12, height: textField.width)) |
34 | 34 |
textField.leftView = leftView |
35 | 35 |
textField.leftViewMode = .always |
36 |
- textField.placeholder = viewModel.item.value.group.groupName |
|
36 |
+ textField.placeholder = viewModel.item.value.group.group_name |
|
37 | 37 |
} |
38 | 38 |
|
39 | 39 |
func bindTextFieldToSaveButton() { |
@@ -11,14 +11,14 @@ import PaiaiUIKit |
||
11 | 11 |
|
12 | 12 |
class GroupQRView: NiblessView { |
13 | 13 |
|
14 |
- private var groupName: String |
|
15 |
- private var groupAvatar: String |
|
14 |
+ private var group_name: String |
|
15 |
+ private var group_avatar: String |
|
16 | 16 |
private var groupQR: String |
17 | 17 |
|
18 | 18 |
lazy var groupAvatarImageView: UIImageView = { |
19 | 19 |
let imageView = UIImageView() |
20 | 20 |
|
21 |
- imageView.image = UIImage(named: groupAvatar) |
|
21 |
+ imageView.image = UIImage(named: group_avatar) |
|
22 | 22 |
|
23 | 23 |
return imageView |
24 | 24 |
}() |
@@ -26,7 +26,7 @@ class GroupQRView: NiblessView { |
||
26 | 26 |
lazy var groupNameLabel: UILabel = { |
27 | 27 |
let label = UILabel() |
28 | 28 |
|
29 |
- label.text = groupName |
|
29 |
+ label.text = group_name |
|
30 | 30 |
label.font = UIFont.systemFont(ofSize: 17) |
31 | 31 |
|
32 | 32 |
return label |
@@ -50,9 +50,9 @@ class GroupQRView: NiblessView { |
||
50 | 50 |
return label |
51 | 51 |
}() |
52 | 52 |
|
53 |
- init(groupName: String, groupAvatar: String, groupQR: String) { |
|
54 |
- self.groupName = groupName |
|
55 |
- self.groupAvatar = groupAvatar |
|
53 |
+ init(group_name: String, group_avatar: String, groupQR: String) { |
|
54 |
+ self.group_name = group_name |
|
55 |
+ self.group_avatar = group_avatar |
|
56 | 56 |
self.groupQR = groupQR |
57 | 57 |
|
58 | 58 |
super.init(frame: CGRect.zero) |
@@ -147,11 +147,11 @@ fileprivate extension GroupViewController { |
||
147 | 147 |
} |
148 | 148 |
|
149 | 149 |
func bindViewModelToNavigationBarTitle() { |
150 |
- viewModel.groupName.bind(to: navigationBarViewTitle.rx.text).disposed(by: disposeBag) |
|
150 |
+ viewModel.group_name.bind(to: navigationBarViewTitle.rx.text).disposed(by: disposeBag) |
|
151 | 151 |
} |
152 | 152 |
|
153 | 153 |
func bindViewModelToNavigationBarImage() { |
154 |
- viewModel.groupAvatar |
|
154 |
+ viewModel.group_avatar |
|
155 | 155 |
.subscribe(onNext: {[weak self] (avatar) in |
156 | 156 |
guard let `self` = self else { return } |
157 | 157 |
self.navigationBarViewImage.image = UIImage(named: avatar) |
@@ -185,10 +185,10 @@ extension GroupViewController { |
||
185 | 185 |
|
186 | 186 |
@objc func presentGroupQR() { |
187 | 187 |
let groupItem = viewModel.groupItem.value |
188 |
- let alert = AlertViewController(style: .custom(GroupQRView(groupName: groupItem.groupName, |
|
189 |
- groupAvatar: "Group\(groupItem.groupDefaultAvatar)", |
|
190 |
- groupQR: "https:api.pai.ai/g/\(groupItem.group_id)"), |
|
191 |
- AlertAnimator()) ) |
|
188 |
+ let qrView = GroupQRView(group_name: groupItem.group_name, |
|
189 |
+ group_avatar: "Group\(groupItem.group_default_avatar)", |
|
190 |
+ groupQR: "https:api.pai.ai/g/\(groupItem.group_id)") |
|
191 |
+ let alert = AlertViewController(style: .custom(qrView, AlertAnimator())) |
|
192 | 192 |
presentController(alert) |
193 | 193 |
} |
194 | 194 |
} |
@@ -71,8 +71,9 @@ extension CreateGroupViewController: UITableViewDataSource, UITableViewDelegate |
||
71 | 71 |
default: |
72 | 72 |
let cell = tableView.dequeueReusableCell(withIdentifier: "RecentCell", for: indexPath) |
73 | 73 |
let group = RecentGroupInfo.share[indexPath.row - 1] |
74 |
- cell.textLabel?.text = group.groupName |
|
75 |
- cell.imageView?.setImage(group.groupAvatar, placeholder: UIImage(named: "Group\(group.groupDefaultAvatar)")) |
|
74 |
+ cell.textLabel?.text = group.group_name |
|
75 |
+ cell.imageView?.setImage(group.group_avatar, |
|
76 |
+ placeholder: UIImage(named: "Group\(group.group_default_avatar)")) |
|
76 | 77 |
|
77 | 78 |
return cell |
78 | 79 |
} |
@@ -30,10 +30,10 @@ final class MessageCommentAndThumbupCell: UITableViewCell { |
||
30 | 30 |
|
31 | 31 |
// MARK: view function |
32 | 32 |
func setInfo(_ info: MessageListItem) { |
33 |
- time.text = info.createAt |
|
33 |
+ time.text = info.create_at |
|
34 | 34 |
username.text = info.from_nickname |
35 | 35 |
userImage.setImage(info.from_avatar, placeholder: UIImage.defaultAvatar) |
36 |
- myPhoto.setImage(info.group_photo_info.photoThumbnailUrl, placeholder: UIImage.photoPlaceholder) |
|
36 |
+ myPhoto.setImage(info.group_photo_info.photo_thumbnail_url, placeholder: UIImage.photoPlaceholder) |
|
37 | 37 |
|
38 | 38 |
if info.msg_title == "评论" { |
39 | 39 |
content.text = info.msg_content |
@@ -20,6 +20,6 @@ final class MessageSystemCell: UITableViewCell { |
||
20 | 20 |
func setInfo(_ info: MessageListItem) { |
21 | 21 |
name.text = info.title |
22 | 22 |
content.text = info.content |
23 |
- time.text = info.createAt |
|
23 |
+ time.text = info.create_at |
|
24 | 24 |
} |
25 | 25 |
} |
@@ -20,9 +20,9 @@ final class GroupCell: UITableViewCell { |
||
20 | 20 |
|
21 | 21 |
// MARK: init interface |
22 | 22 |
func setInfo(_ info: GroupItem) { |
23 |
- groupImageView.setImage(info.groupAvatar, placeholder: UIImage(named: "Group\(info.groupDefaultAvatar)")) |
|
24 |
- groupNameLabel.text = info.groupName |
|
25 |
- createTimeLabel.text = info.createAt |
|
23 |
+ groupImageView.setImage(info.group_avatar, placeholder: UIImage(named: "Group\(info.group_default_avatar)")) |
|
24 |
+ groupNameLabel.text = info.group_name |
|
25 |
+ createTimeLabel.text = info.create_at |
|
26 | 26 |
photoNumLabel.text = "有\(info.group_photo_num)张照片" |
27 | 27 |
} |
28 | 28 |
} |
@@ -30,9 +30,9 @@ class PhotoCell: UICollectionViewCell { |
||
30 | 30 |
|
31 | 31 |
switch source { |
32 | 32 |
case .home: |
33 |
- headLabel.text = info.groupName |
|
34 |
- headImageView.setImage(info.groupAvatar, placeholder: UIImage(named: "Group\(info.groupDefaultAvatar)")) |
|
35 |
- timeLabel.text = info.createAt |
|
33 |
+ headLabel.text = info.group_name |
|
34 |
+ headImageView.setImage(info.group_avatar, placeholder: UIImage(named: "Group\(info.group_default_avatar)")) |
|
35 |
+ timeLabel.text = info.create_at |
|
36 | 36 |
case .group: |
37 | 37 |
headLabel.text = info.nickname |
38 | 38 |
headImageView.setImage(info.avatar, placeholder: UIImage.photoPlaceholder) |
@@ -40,7 +40,7 @@ class PhotoCell: UICollectionViewCell { |
||
40 | 40 |
} |
41 | 41 |
|
42 | 42 |
thumbupLabel.text = "\(info.thumbup_num)" |
43 |
- commentLabel.text = "\(info.commentNum)" |
|
43 |
+ commentLabel.text = "\(info.comment_num)" |
|
44 | 44 |
} |
45 | 45 |
|
46 | 46 |
} |
@@ -36,12 +36,12 @@ final class ImageCell: UICollectionViewCell, UIScrollViewDelegate { |
||
36 | 36 |
return photoImage |
37 | 37 |
} |
38 | 38 |
// MARK: zoom |
39 |
- @objc func doubleTap(_ gr: UITapGestureRecognizer) { |
|
39 |
+ @objc func doubleTap(_ gestureRecognizer: UITapGestureRecognizer) { |
|
40 | 40 |
if scrollView.zoomScale > scrollView.minimumZoomScale { |
41 | 41 |
scrollView.setZoomScale(scrollView.minimumZoomScale, animated: true) |
42 | 42 |
} else { |
43 | 43 |
//Zoom to rect |
44 |
- let tapPt = gr.location(in: scrollView) |
|
44 |
+ let tapPt = gestureRecognizer.location(in: scrollView) |
|
45 | 45 |
var zoomRect = CGRect.zero |
46 | 46 |
zoomRect.size.width = frame.width / scrollView.maximumZoomScale |
47 | 47 |
zoomRect.size.height = frame.height / scrollView.maximumZoomScale |
@@ -1,11 +1,7 @@ |
||
1 | 1 |
<?xml version="1.0" encoding="UTF-8"?> |
2 |
-<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="14460.31" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useSafeAreas="YES" colorMatched="YES"> |
|
3 |
- <device id="retina4_7" orientation="portrait"> |
|
4 |
- <adaptation id="fullscreen"/> |
|
5 |
- </device> |
|
2 |
+<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="14490.70" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useSafeAreas="YES" colorMatched="YES"> |
|
6 | 3 |
<dependencies> |
7 |
- <deployment identifier="iOS"/> |
|
8 |
- <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="14460.20"/> |
|
4 |
+ <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="14490.49"/> |
|
9 | 5 |
<capability name="Safe area layout guides" minToolsVersion="9.0"/> |
10 | 6 |
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/> |
11 | 7 |
</dependencies> |
@@ -156,7 +152,7 @@ |
||
156 | 152 |
<nil key="highlightedColor"/> |
157 | 153 |
</label> |
158 | 154 |
<imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="icon-time" translatesAutoresizingMaskIntoConstraints="NO" id="xXQ-Hj-wzP"> |
159 |
- <rect key="frame" x="286" y="0.0" width="36" height="36"/> |
|
155 |
+ <rect key="frame" x="306" y="10" width="16" height="16"/> |
|
160 | 156 |
</imageView> |
161 | 157 |
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="5分钟前" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="QpI-Mp-URP"> |
162 | 158 |
<rect key="frame" x="332" y="12" width="37" height="12"/> |
@@ -183,24 +179,24 @@ |
||
183 | 179 |
<rect key="frame" x="0.0" y="444" width="375" height="44"/> |
184 | 180 |
<subviews> |
185 | 181 |
<imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="icon-thumbup" translatesAutoresizingMaskIntoConstraints="NO" id="haH-1L-wfF"> |
186 |
- <rect key="frame" x="15" y="4" width="36" height="36"/> |
|
182 |
+ <rect key="frame" x="15" y="14" width="16" height="16"/> |
|
187 | 183 |
</imageView> |
188 | 184 |
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="赞" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="vrx-vV-ymg"> |
189 |
- <rect key="frame" x="57" y="13.5" width="14.5" height="17"/> |
|
185 |
+ <rect key="frame" x="37" y="13.5" width="14.5" height="17"/> |
|
190 | 186 |
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/> |
191 | 187 |
<fontDescription key="fontDescription" type="system" pointSize="14"/> |
192 | 188 |
<color key="textColor" red="0.20000000000000001" green="0.20000000000000001" blue="0.20000000000000001" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> |
193 | 189 |
<nil key="highlightedColor"/> |
194 | 190 |
</label> |
195 | 191 |
<label opaque="NO" userInteractionEnabled="NO" tag="1002" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="(0)" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="h88-PP-cvG"> |
196 |
- <rect key="frame" x="77.5" y="14.5" width="17" height="15"/> |
|
192 |
+ <rect key="frame" x="57.5" y="14.5" width="17" height="15"/> |
|
197 | 193 |
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/> |
198 | 194 |
<fontDescription key="fontDescription" type="system" pointSize="12"/> |
199 | 195 |
<color key="textColor" red="0.59999999999999998" green="0.59999999999999998" blue="0.59999999999999998" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> |
200 | 196 |
<nil key="highlightedColor"/> |
201 | 197 |
</label> |
202 | 198 |
<imageView userInteractionEnabled="NO" tag="1008" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="list-arrow" translatesAutoresizingMaskIntoConstraints="NO" id="sg5-Nx-u2C"> |
203 |
- <rect key="frame" x="341" y="4" width="24" height="36"/> |
|
199 |
+ <rect key="frame" x="349" y="14" width="16" height="16"/> |
|
204 | 200 |
</imageView> |
205 | 201 |
</subviews> |
206 | 202 |
<color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/> |
@@ -227,24 +223,24 @@ |
||
227 | 223 |
<rect key="frame" x="0.0" y="489" width="375" height="44"/> |
228 | 224 |
<subviews> |
229 | 225 |
<imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="icon-comment" translatesAutoresizingMaskIntoConstraints="NO" id="zTQ-T2-IMt"> |
230 |
- <rect key="frame" x="15" y="4" width="36" height="36"/> |
|
226 |
+ <rect key="frame" x="15" y="14" width="16" height="16"/> |
|
231 | 227 |
</imageView> |
232 | 228 |
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="评论" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="vLK-B7-FQc"> |
233 |
- <rect key="frame" x="57" y="13.5" width="29" height="17"/> |
|
229 |
+ <rect key="frame" x="37" y="13.5" width="29" height="17"/> |
|
234 | 230 |
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/> |
235 | 231 |
<fontDescription key="fontDescription" type="system" pointSize="14"/> |
236 | 232 |
<color key="textColor" red="0.20000000000000001" green="0.20000000000000001" blue="0.20000000000000001" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> |
237 | 233 |
<nil key="highlightedColor"/> |
238 | 234 |
</label> |
239 | 235 |
<label opaque="NO" userInteractionEnabled="NO" tag="1002" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="(0)" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="cuT-s1-NnA"> |
240 |
- <rect key="frame" x="92" y="14.5" width="17" height="15"/> |
|
236 |
+ <rect key="frame" x="72" y="14.5" width="17" height="15"/> |
|
241 | 237 |
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/> |
242 | 238 |
<fontDescription key="fontDescription" type="system" pointSize="12"/> |
243 | 239 |
<color key="textColor" red="0.59999999999999998" green="0.59999999999999998" blue="0.59999999999999998" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> |
244 | 240 |
<nil key="highlightedColor"/> |
245 | 241 |
</label> |
246 | 242 |
<imageView userInteractionEnabled="NO" tag="1009" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="list-arrow" translatesAutoresizingMaskIntoConstraints="NO" id="ns5-B1-ilP"> |
247 |
- <rect key="frame" x="341" y="4" width="24" height="36"/> |
|
243 |
+ <rect key="frame" x="349" y="14" width="16" height="16"/> |
|
248 | 244 |
</imageView> |
249 | 245 |
</subviews> |
250 | 246 |
<color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/> |
@@ -527,8 +523,8 @@ |
||
527 | 523 |
<outlet property="commentTableView" destination="fD2-Ow-gtt" id="jog-WM-p44"/> |
528 | 524 |
<outlet property="commentTextField" destination="1va-ae-Juh" id="TpO-kE-PhT"/> |
529 | 525 |
<outlet property="enterGroupView" destination="gSr-Cm-y1W" id="bNT-Z4-eOG"/> |
530 |
- <outlet property="groupAvatar" destination="nng-M9-7cj" id="Y42-Tc-QnV"/> |
|
531 |
- <outlet property="groupName" destination="XM7-FX-tOk" id="ifP-h1-72j"/> |
|
526 |
+ <outlet property="group_avatar" destination="nng-M9-7cj" id="Y42-Tc-QnV"/> |
|
527 |
+ <outlet property="group_name" destination="XM7-FX-tOk" id="ifP-h1-72j"/> |
|
532 | 528 |
<outlet property="keyboardGestureRcognizer" destination="bqM-7G-5Nw" id="uUS-Ox-osk"/> |
533 | 529 |
<outlet property="photoCollectionView" destination="dtf-M8-otl" id="VlY-wa-ekc"/> |
534 | 530 |
<outlet property="photoTime" destination="QpI-Mp-URP" id="rJM-TG-fZW"/> |
@@ -567,14 +563,14 @@ |
||
567 | 563 |
<objects> |
568 | 564 |
<viewController storyboardIdentifier="ShareViewController" automaticallyAdjustsScrollViewInsets="NO" id="KnW-jg-4H5" customClass="ShareViewController" customModule="Paiai_iOS" customModuleProvider="target" sceneMemberID="viewController"> |
569 | 565 |
<view key="view" contentMode="scaleToFill" id="rN5-Zb-vwm"> |
570 |
- <rect key="frame" x="0.0" y="0.0" width="375" height="667"/> |
|
566 |
+ <rect key="frame" x="0.0" y="0.0" width="414" height="896"/> |
|
571 | 567 |
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> |
572 | 568 |
<subviews> |
573 | 569 |
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="edT-EA-xhZ" userLabel="Share View"> |
574 |
- <rect key="frame" x="0.0" y="463" width="375" height="77"/> |
|
570 |
+ <rect key="frame" x="0.0" y="692" width="414" height="77"/> |
|
575 | 571 |
<subviews> |
576 | 572 |
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" alignment="center" translatesAutoresizingMaskIntoConstraints="NO" id="itC-HJ-ZaT" userLabel="circle"> |
577 |
- <rect key="frame" x="30.5" y="0.0" width="54" height="71"/> |
|
573 |
+ <rect key="frame" x="36.5" y="0.0" width="54" height="71"/> |
|
578 | 574 |
<subviews> |
579 | 575 |
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="yKG-rx-pgX"> |
580 | 576 |
<rect key="frame" x="0.0" y="0.0" width="54" height="54"/> |
@@ -599,7 +595,7 @@ |
||
599 | 595 |
</constraints> |
600 | 596 |
</stackView> |
601 | 597 |
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" alignment="center" translatesAutoresizingMaskIntoConstraints="NO" id="W6V-MR-s2s" userLabel="weixin"> |
602 |
- <rect key="frame" x="117" y="0.0" width="54" height="71"/> |
|
598 |
+ <rect key="frame" x="131.5" y="0.0" width="54" height="71"/> |
|
603 | 599 |
<subviews> |
604 | 600 |
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="WHf-tp-9sX"> |
605 | 601 |
<rect key="frame" x="0.0" y="0.0" width="54" height="54"/> |
@@ -624,7 +620,7 @@ |
||
624 | 620 |
</constraints> |
625 | 621 |
</stackView> |
626 | 622 |
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" alignment="center" translatesAutoresizingMaskIntoConstraints="NO" id="KU1-aO-nLf" userLabel="QQ"> |
627 |
- <rect key="frame" x="202" y="0.0" width="54" height="71"/> |
|
623 |
+ <rect key="frame" x="226" y="0.0" width="54" height="71"/> |
|
628 | 624 |
<subviews> |
629 | 625 |
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="kgp-ou-XXF"> |
630 | 626 |
<rect key="frame" x="0.0" y="0.0" width="54" height="54"/> |
@@ -649,7 +645,7 @@ |
||
649 | 645 |
</constraints> |
650 | 646 |
</stackView> |
651 | 647 |
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" alignment="center" translatesAutoresizingMaskIntoConstraints="NO" id="ZLk-gf-Jzh" userLabel="weibo"> |
652 |
- <rect key="frame" x="285.5" y="0.0" width="54" height="71"/> |
|
648 |
+ <rect key="frame" x="318" y="0.0" width="54" height="71"/> |
|
653 | 649 |
<subviews> |
654 | 650 |
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="uCq-aJ-DOY"> |
655 | 651 |
<rect key="frame" x="0.0" y="0.0" width="54" height="54"/> |
@@ -708,11 +704,11 @@ |
||
708 | 704 |
<objects> |
709 | 705 |
<viewController storyboardIdentifier="PhotoPreviewViewController" automaticallyAdjustsScrollViewInsets="NO" id="p3y-A2-QU1" userLabel="PhotoPreviewViewController" customClass="PhotoPreviewViewController" customModule="Paiai_iOS" customModuleProvider="target" sceneMemberID="viewController"> |
710 | 706 |
<view key="view" contentMode="scaleToFill" id="MdC-Fu-zFL"> |
711 |
- <rect key="frame" x="0.0" y="0.0" width="375" height="667"/> |
|
707 |
+ <rect key="frame" x="0.0" y="0.0" width="414" height="896"/> |
|
712 | 708 |
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> |
713 | 709 |
<subviews> |
714 | 710 |
<collectionView clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" pagingEnabled="YES" showsHorizontalScrollIndicator="NO" showsVerticalScrollIndicator="NO" indicatorStyle="white" dataMode="prototypes" prefetchingEnabled="NO" translatesAutoresizingMaskIntoConstraints="NO" id="cvI-jg-TrD"> |
715 |
- <rect key="frame" x="0.0" y="0.0" width="375" height="667"/> |
|
711 |
+ <rect key="frame" x="0.0" y="0.0" width="414" height="896"/> |
|
716 | 712 |
<collectionViewFlowLayout key="collectionViewLayout" scrollDirection="horizontal" minimumLineSpacing="0.0" minimumInteritemSpacing="0.0" id="nE7-Ce-1KB"> |
717 | 713 |
<size key="itemSize" width="237.5" height="357"/> |
718 | 714 |
<size key="headerReferenceSize" width="0.0" height="0.0"/> |
@@ -721,7 +717,7 @@ |
||
721 | 717 |
</collectionViewFlowLayout> |
722 | 718 |
<cells> |
723 | 719 |
<collectionViewCell opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" reuseIdentifier="imageCell" id="PAU-eQ-c9k" customClass="ImageCell" customModule="Paiai_iOS" customModuleProvider="target"> |
724 |
- <rect key="frame" x="0.0" y="155" width="237.5" height="357"/> |
|
720 |
+ <rect key="frame" x="0.0" y="0.0" width="237.5" height="357"/> |
|
725 | 721 |
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/> |
726 | 722 |
<view key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center"> |
727 | 723 |
<rect key="frame" x="0.0" y="0.0" width="237.5" height="357"/> |
@@ -749,24 +745,24 @@ |
||
749 | 745 |
</cells> |
750 | 746 |
</collectionView> |
751 | 747 |
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="BRP-J0-WGF" userLabel="button group"> |
752 |
- <rect key="frame" x="0.0" y="623" width="375" height="44"/> |
|
748 |
+ <rect key="frame" x="0.0" y="852" width="414" height="44"/> |
|
753 | 749 |
<subviews> |
754 | 750 |
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="2r6-s1-9be" userLabel="back"> |
755 |
- <rect key="frame" x="43.5" y="-26" width="96" height="96"/> |
|
751 |
+ <rect key="frame" x="93" y="11" width="16" height="22"/> |
|
756 | 752 |
<state key="normal" image="navigation-back"/> |
757 | 753 |
<connections> |
758 | 754 |
<action selector="back" destination="p3y-A2-QU1" eventType="touchUpInside" id="xKk-c3-Iub"/> |
759 | 755 |
</connections> |
760 | 756 |
</button> |
761 | 757 |
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="aOC-mu-785" userLabel="rotate"> |
762 |
- <rect key="frame" x="139.5" y="-26" width="96" height="96"/> |
|
758 |
+ <rect key="frame" x="199" y="11" width="16" height="22"/> |
|
763 | 759 |
<state key="normal" image="BTN-rotate"/> |
764 | 760 |
<connections> |
765 | 761 |
<action selector="rotateTheImage:" destination="p3y-A2-QU1" eventType="touchUpInside" id="LiB-TG-UYL"/> |
766 | 762 |
</connections> |
767 | 763 |
</button> |
768 | 764 |
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="Q90-2h-mGx" userLabel="download"> |
769 |
- <rect key="frame" x="231" y="-26" width="96" height="96"/> |
|
765 |
+ <rect key="frame" x="300" y="11" width="16" height="22"/> |
|
770 | 766 |
<state key="normal" image="BTN-download"/> |
771 | 767 |
<connections> |
772 | 768 |
<action selector="download:" destination="p3y-A2-QU1" eventType="touchUpInside" id="cEE-Yt-FWf"/> |
@@ -32,6 +32,6 @@ class PhotoDetailCommentCell: UITableViewCell { |
||
32 | 32 |
headImage.setImage(info.avatar, placeholder: UIImage.defaultAvatar) |
33 | 33 |
name.text = info.nickname |
34 | 34 |
content.text = info.comment |
35 |
- time.text = info.createAt |
|
35 |
+ time.text = info.create_at |
|
36 | 36 |
} |
37 | 37 |
} |
@@ -16,8 +16,8 @@ import PaiaiUIKit |
||
16 | 16 |
final class PhotoDetailViewController: UIViewController { |
17 | 17 |
|
18 | 18 |
@IBOutlet weak var enterGroupView: UIView! |
19 |
- @IBOutlet weak var groupAvatar: UIImageView! |
|
20 |
- @IBOutlet weak var groupName: UILabel! |
|
19 |
+ @IBOutlet weak var group_avatar: UIImageView! |
|
20 |
+ @IBOutlet weak var group_name: UILabel! |
|
21 | 21 |
|
22 | 22 |
@IBOutlet weak var photoCollectionView: UICollectionView! |
23 | 23 |
|
@@ -99,7 +99,7 @@ extension PhotoDetailViewController { |
||
99 | 99 |
@IBAction func share() { |
100 | 100 |
// let ctl = ShareViewController UIStoryboard.photoDetail.instantiateController(ShareViewController.self) |
101 | 101 |
// ctl.shareContent = "我使用拍爱分享了一张美图,你也快来试试吧" |
102 |
-// // ctl.shareImgUrlThumb = datas[currentPhotoIndex].photoThumbnailUrl |
|
102 |
+// // ctl.shareImgUrlThumb = datas[currentPhotoIndex].photo_thumbnail_url |
|
103 | 103 |
// // ctl.shareUrl = datas[currentPhotoIndex].photo_share_url |
104 | 104 |
// presentController(ctl) |
105 | 105 |
} |
@@ -139,7 +139,7 @@ extension PhotoDetailViewController { |
||
139 | 139 |
configureCell: {(_, collectionView, indexPath, item) in |
140 | 140 |
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "photoDetailImageCell", |
141 | 141 |
for: indexPath) as! PhotoDetailImageCell |
142 |
- cell.imageView.setImage(item.murl.isEmpty ? item.photoThumbnail2Url : item.murl, |
|
142 |
+ cell.imageView.setImage(item.murl.isEmpty ? item.photo_thumbnail2_url : item.murl, |
|
143 | 143 |
placeholder: UIImage.photoPlaceholder) |
144 | 144 |
return cell |
145 | 145 |
}) |
@@ -185,13 +185,13 @@ extension PhotoDetailViewController { |
||
185 | 185 |
} |
186 | 186 |
|
187 | 187 |
func bindViewModelToGroupName() { |
188 |
- viewModel.groupName.bind(to: groupName.rx.text).disposed(by: disposeBag) |
|
188 |
+ viewModel.group_name.bind(to: group_name.rx.text).disposed(by: disposeBag) |
|
189 | 189 |
} |
190 | 190 |
|
191 | 191 |
func bindViewModelToGroupAvatar() { |
192 |
- viewModel.groupAvatar |
|
192 |
+ viewModel.group_avatar |
|
193 | 193 |
.map { UIImage(named: #"Group\#($0)"#)} |
194 |
- .bind(to: groupAvatar.rx.image) |
|
194 |
+ .bind(to: group_avatar.rx.image) |
|
195 | 195 |
.disposed(by: disposeBag) |
196 | 196 |
} |
197 | 197 |
|