├── .gitignore ├── PostDemo.xcodeproj ├── project.pbxproj ├── project.xcworkspace │ ├── contents.xcworkspacedata │ └── xcshareddata │ │ └── IDEWorkspaceChecks.plist └── xcshareddata │ └── xcschemes │ └── PostDemo.xcscheme ├── PostDemo ├── AppDelegate.swift ├── Assets.xcassets │ ├── AppIcon.appiconset │ │ └── Contents.json │ └── Contents.json ├── Base.lproj │ └── LaunchScreen.storyboard ├── CommentInputView.swift ├── CommentTextView.swift ├── HScrollViewController.swift ├── HomeNavigationBar.swift ├── HomeView.swift ├── Info.plist ├── KeyboardResponder.swift ├── Post.swift ├── PostCell.swift ├── PostCellToolbarButton.swift ├── PostDetailView.swift ├── PostImageCell.swift ├── PostListView.swift ├── PostVIPBadge.swift ├── Preview Content │ └── Preview Assets.xcassets │ │ └── Contents.json ├── Resources │ ├── 005tnxzUly8gab4i2r73xj30u00u0js8.jpg │ ├── 006PdkDogy1gap6ngiyn3j30u011idle.jpg │ ├── 006PdkDogy1gap6ngj12ej30u011itf7.jpg │ ├── 006PdkDoly8ffywe2fq39j304g04gwed.jpg │ ├── 006gWxMEly1gavap86qr9j30ht0qo40t.jpg │ ├── 006gWxMEly1gavap88gttj30hs0a0dgf.jpg │ ├── 006gWxMEly1gavap8dywoj30hs0bwq48.jpg │ ├── 006gWxMEly1gavap8vsqaj30hs0bwgm6.jpg │ ├── 006gWxMEly8g0bjpl3ynij30kv0kv773.jpg │ ├── 4e7f0c83gy1gam2misv31j21hc0u016k.jpg │ ├── 4e7f0c83gy1gam2mjhk8zj21hc0v6wnx.jpg │ ├── 4e7f0c83gy1gam2ml6nucj22tc240kjl.jpg │ ├── 4e7f0c83gy1gam2mn58d3j22tc240qv5.jpg │ ├── 4e7f0c83gy1gam2mp0x4pj22tc240u0x.jpg │ ├── 4e7f0c83gy1gam2mr1b81j22tc2407wi.jpg │ ├── 4e7f0c83ly8g1ho507078j20ro0rojtq.jpg │ ├── 630584a6gy1gau54zgaxhj20m80et0vq.jpg │ ├── 630584a6gy1gau54zl806j20m80etmzo.jpg │ ├── 630584a6gy1gau54zm4dtj20m80dftbv.jpg │ ├── 630584a6gy1gau54zyj61j20m80etn07.jpg │ ├── 630584a6ly8fqs5wwkkmrj20ku0kuta7.jpg │ ├── 648ed25bjw8est9nqrtnij20500503yr.jpg │ ├── 6a2afec3gy1gaulykcejqj20t5145wns.jpg │ ├── 6a2afec3jw8fb4ld0qf2gj20e80dsdfz.jpg │ ├── 6ec3b446gy1gavd4xud8lj20j60qkwj0.jpg │ ├── 6ec3b446gy1gavd51jc4lj20j60pmwhl.jpg │ ├── 6ec3b446gy1gavd523embj20j60pytd6.jpg │ ├── 6ec3b446jw1e8qgp5bmzyj2050050aa8.jpg │ ├── 700a34f6gy1gaunswwui7j20j60pl78e.jpg │ ├── 700a34f6gy1gaunswxtlrj20j60pkgok.jpg │ ├── 700a34f6gy1gaunswy5qnj20j60pkadk.jpg │ ├── 700a34f6gy1gaunsx2jywj20j60pkaeu.jpg │ ├── 700a34f6gy1gaunsxgzixj20j60edmz8.jpg │ ├── 700a34f6gy1gaunsxhp4pj20j60pkn1k.jpg │ ├── 700a34f6ly8g9a29rjt92j20fn0iqdg8.jpg │ ├── 76297935ly1gatz89dzblj23402c0qv6.jpg │ ├── 76297935ly1gatz8g5rvxj22c03401kz.jpg │ ├── 76297935ly1gatz8k5itij22c02c01ky.jpg │ ├── 76297935ly1gatz8obqvkj22c0340npe.jpg │ ├── 76297935ly8g4phfkq68hj20u00u0mzt.jpg │ ├── 7f9147a5ly1fzxlgxgzpij20e90fltsj.jpg │ ├── 7f9147a5ly1fzxlh4ovuej20e90fl4fo.jpg │ ├── 7f9147a5ly1fzxlh6hzdnj20e90fl7me.jpg │ ├── 8697cf1ely8gashxj3b09j20u00u040v.jpg │ ├── 8a0b5544gy1gauy2ex786j20u0129aed.jpg │ ├── 8a0b5544gy1gauy2flua6j20u00hitab.jpg │ ├── 8a0b5544gy1gauy2g35yoj20u00fomzf.jpg │ ├── 8a0b5544gy1gauy2gmkg9j20u00gegnp.jpg │ ├── 8a0b5544gy1gauy2gz000j20u00n6wgj.jpg │ ├── 8a0b5544gy1gauy2hcozsj20u01czdiy.jpg │ ├── 8a0b5544jw1e8qgp5bmzyj2050050aa8.jpg │ ├── 9dc7402fgy1gavd367p0pj20j60nywic.jpg │ ├── 9dc7402fgy1gavd37l9nwj20j60ny44q.jpg │ ├── 9dc7402fgy1gavd38kqjtj20j60nyn1d.jpg │ ├── 9dc7402fgy1gavd38wwlrj20j60nyq6y.jpg │ ├── 9dc7402fgy1gavd39ba15j20j60nywii.jpg │ ├── 9dc7402fjw1e8qgp5bmzyj2050050aa8.jpg │ ├── PostListData_hot_1.json │ ├── PostListData_recommend_1.json │ ├── bca7fdafgw1ekhkps65b1j2050050dg4.jpg │ ├── bca7fdafly1gax1gqd9vmj20c80ayaam.jpg │ ├── bca7fdafly1gax1gqdg6qj20c80avdgl.jpg │ ├── bca7fdafly1gax1gqdhouj20c80axaam.jpg │ ├── bca7fdafly1gax1gqdnboj20c80atmxp.jpg │ ├── bca7fdafly1gax1gqehdaj20c80atq3x.jpg │ ├── bca7fdafly1gax1gqfgsjj20c80axaay.jpg │ ├── c5aa834fgy1gauzr6venkj20u01hc12f.jpg │ ├── c5aa834fgy1gauzr86bp5j20pb0w47in.jpg │ ├── c5aa834fgy1gauzr8ok78j20tz12fk8w.jpg │ ├── c5aa834fgy1gauzr95r6fj20tw0l3dq4.jpg │ ├── c5aa834fgy1gauzrb7s5ej20tz13qh5x.jpg │ ├── c5aa834fly8g97m8ix9lcj20re0regnk.jpg │ ├── d0c21786ly1gavj2btv6tj20c80790tg.jpg │ ├── d0c21786ly1gavj2c0kcej20c8096dh7.jpg │ ├── d0c21786ly1gavj2cdrkyj20c80720tg.jpg │ ├── d0c21786ly1gavj2cowp9j20c8083ab4.jpg │ ├── d0c21786ly1gavj2d17d9j20c808zq3r.jpg │ ├── d0c21786ly8fsax1ftiifj20ro0ro43g.jpg │ ├── eb5c94aegy1gav2509cp5j20zk0k0n2j.jpg │ ├── eb5c94aegy1gav25n5ibjj20zk1h8wuu.jpg │ ├── eb5c94aegy1gav25ox6dvj20u00k1go9.jpg │ ├── eb5c94aegy1gav26fycwlj20zk1h8drh.jpg │ └── eb5c94aely8fmvumnl9baj20v90v9q49.jpg ├── SceneDelegate.swift └── UserData.swift └── README.md /.gitignore: -------------------------------------------------------------------------------- 1 | # Xcode 2 | # 3 | # gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore 4 | 5 | ## User settings 6 | xcuserdata/ 7 | 8 | ## compatibility with Xcode 8 and earlier (ignoring not required starting Xcode 9) 9 | *.xcscmblueprint 10 | *.xccheckout 11 | 12 | ## compatibility with Xcode 3 and earlier (ignoring not required starting Xcode 4) 13 | build/ 14 | DerivedData/ 15 | *.moved-aside 16 | *.pbxuser 17 | !default.pbxuser 18 | *.mode1v3 19 | !default.mode1v3 20 | *.mode2v3 21 | !default.mode2v3 22 | *.perspectivev3 23 | !default.perspectivev3 24 | 25 | ## Obj-C/Swift specific 26 | *.hmap 27 | 28 | ## App packaging 29 | *.ipa 30 | *.dSYM.zip 31 | *.dSYM 32 | 33 | ## Playgrounds 34 | timeline.xctimeline 35 | playground.xcworkspace 36 | 37 | # Swift Package Manager 38 | # 39 | # Add this line if you want to avoid checking in source code from Swift Package Manager dependencies. 40 | # Packages/ 41 | # Package.pins 42 | # Package.resolved 43 | # *.xcodeproj 44 | # 45 | # Xcode automatically generates this directory with a .xcworkspacedata file and xcuserdata 46 | # hence it is not needed unless you have added a package configuration file to your project 47 | .swiftpm 48 | 49 | .build/ 50 | 51 | # CocoaPods 52 | # 53 | # We recommend against adding the Pods directory to your .gitignore. However 54 | # you should judge for yourself, the pros and cons are mentioned at: 55 | # https://guides.cocoapods.org/using/using-cocoapods.html#should-i-check-the-pods-directory-into-source-control 56 | 57 | Pods/ 58 | 59 | # Add this line if you want to avoid checking in source code from the Xcode workspace 60 | # *.xcworkspace 61 | 62 | # Carthage 63 | # 64 | # Add this line if you want to avoid checking in source code from Carthage dependencies. 65 | # Carthage/Checkouts 66 | 67 | Carthage/Build/ 68 | 69 | # Accio dependency management 70 | Dependencies/ 71 | .accio/ 72 | 73 | # fastlane 74 | # 75 | # It is recommended to not store the screenshots in the git repo. 76 | # Instead, use fastlane to re-generate the screenshots whenever they are needed. 77 | # For more information about the recommended setup visit: 78 | # https://docs.fastlane.tools/best-practices/source-control/#source-control 79 | 80 | fastlane/report.xml 81 | fastlane/Preview.html 82 | fastlane/screenshots/**/*.png 83 | fastlane/test_output 84 | 85 | # Code Injection 86 | # 87 | # After new code Injection tools there's a generated folder /iOSInjectionProject 88 | # https://github.com/johnno1962/injectionforxcode 89 | 90 | iOSInjectionProject/ 91 | 92 | # macOS 93 | 94 | .DS_Store 95 | -------------------------------------------------------------------------------- /PostDemo.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 50; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | 002274FD23C3BB3600014786 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 002274FC23C3BB3600014786 /* AppDelegate.swift */; }; 11 | 002274FF23C3BB3600014786 /* SceneDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 002274FE23C3BB3600014786 /* SceneDelegate.swift */; }; 12 | 0022750123C3BB3600014786 /* PostListView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0022750023C3BB3600014786 /* PostListView.swift */; }; 13 | 0022750323C3BB3800014786 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 0022750223C3BB3800014786 /* Assets.xcassets */; }; 14 | 0022750623C3BB3800014786 /* Preview Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 0022750523C3BB3800014786 /* Preview Assets.xcassets */; }; 15 | 0022750923C3BB3800014786 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 0022750723C3BB3800014786 /* LaunchScreen.storyboard */; }; 16 | 0022751823C3C15900014786 /* 4e7f0c83gy1gam2ml6nucj22tc240kjl.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 0022751123C3C15900014786 /* 4e7f0c83gy1gam2ml6nucj22tc240kjl.jpg */; }; 17 | 0022751923C3C15900014786 /* 4e7f0c83gy1gam2mjhk8zj21hc0v6wnx.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 0022751223C3C15900014786 /* 4e7f0c83gy1gam2mjhk8zj21hc0v6wnx.jpg */; }; 18 | 0022751A23C3C15900014786 /* 4e7f0c83ly8g1ho507078j20ro0rojtq.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 0022751323C3C15900014786 /* 4e7f0c83ly8g1ho507078j20ro0rojtq.jpg */; }; 19 | 0022751B23C3C15900014786 /* 4e7f0c83gy1gam2mn58d3j22tc240qv5.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 0022751423C3C15900014786 /* 4e7f0c83gy1gam2mn58d3j22tc240qv5.jpg */; }; 20 | 0022751C23C3C15900014786 /* 4e7f0c83gy1gam2mr1b81j22tc2407wi.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 0022751523C3C15900014786 /* 4e7f0c83gy1gam2mr1b81j22tc2407wi.jpg */; }; 21 | 0022751D23C3C15900014786 /* 4e7f0c83gy1gam2mp0x4pj22tc240u0x.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 0022751623C3C15900014786 /* 4e7f0c83gy1gam2mp0x4pj22tc240u0x.jpg */; }; 22 | 0022751E23C3C15900014786 /* 4e7f0c83gy1gam2misv31j21hc0u016k.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 0022751723C3C15900014786 /* 4e7f0c83gy1gam2misv31j21hc0u016k.jpg */; }; 23 | 0022752023C3C36A00014786 /* PostCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0022751F23C3C36A00014786 /* PostCell.swift */; }; 24 | 0022752223C3C3AB00014786 /* Post.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0022752123C3C3AB00014786 /* Post.swift */; }; 25 | 0041E47523C90BD3006EDCD6 /* HScrollViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0041E47423C90BD3006EDCD6 /* HScrollViewController.swift */; }; 26 | 005DCA6123C5639D00845B12 /* PostCellToolbarButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = 005DCA6023C5639D00845B12 /* PostCellToolbarButton.swift */; }; 27 | 0068EB9923CE4430005A8023 /* CommentTextView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0068EB9823CE4430005A8023 /* CommentTextView.swift */; }; 28 | 0068EBE123CE8DF7005A8023 /* KeyboardResponder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0068EBE023CE8DF7005A8023 /* KeyboardResponder.swift */; }; 29 | 0068EBE523CE950D005A8023 /* CommentInputView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0068EBE423CE950D005A8023 /* CommentInputView.swift */; }; 30 | 0068EBE723CECD48005A8023 /* eb5c94aely8fmvumnl9baj20v90v9q49.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 0068EBE623CECD48005A8023 /* eb5c94aely8fmvumnl9baj20v90v9q49.jpg */; }; 31 | 0068EBEB23CECDB1005A8023 /* eb5c94aegy1gav2509cp5j20zk0k0n2j.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 0068EBEA23CECDB1005A8023 /* eb5c94aegy1gav2509cp5j20zk0k0n2j.jpg */; }; 32 | 0068EBEF23CECDE0005A8023 /* eb5c94aegy1gav26fycwlj20zk1h8drh.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 0068EBEE23CECDE0005A8023 /* eb5c94aegy1gav26fycwlj20zk1h8drh.jpg */; }; 33 | 0068EBF123CECDFD005A8023 /* eb5c94aegy1gav25ox6dvj20u00k1go9.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 0068EBF023CECDFD005A8023 /* eb5c94aegy1gav25ox6dvj20u00k1go9.jpg */; }; 34 | 0068EBF323CECE21005A8023 /* eb5c94aegy1gav25n5ibjj20zk1h8wuu.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 0068EBF223CECE21005A8023 /* eb5c94aegy1gav25n5ibjj20zk1h8wuu.jpg */; }; 35 | 0068EBF523CECF7B005A8023 /* bca7fdafgw1ekhkps65b1j2050050dg4.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 0068EBF423CECF7B005A8023 /* bca7fdafgw1ekhkps65b1j2050050dg4.jpg */; }; 36 | 0068EBF723CECFEC005A8023 /* bca7fdafly1gax1gqdg6qj20c80avdgl.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 0068EBF623CECFEC005A8023 /* bca7fdafly1gax1gqdg6qj20c80avdgl.jpg */; }; 37 | 0068EBF923CED001005A8023 /* bca7fdafly1gax1gqdnboj20c80atmxp.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 0068EBF823CED001005A8023 /* bca7fdafly1gax1gqdnboj20c80atmxp.jpg */; }; 38 | 0068EBFB23CED011005A8023 /* bca7fdafly1gax1gqehdaj20c80atq3x.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 0068EBFA23CED011005A8023 /* bca7fdafly1gax1gqehdaj20c80atq3x.jpg */; }; 39 | 0068EBFD23CED020005A8023 /* bca7fdafly1gax1gqfgsjj20c80axaay.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 0068EBFC23CED020005A8023 /* bca7fdafly1gax1gqfgsjj20c80axaay.jpg */; }; 40 | 0068EBFF23CED034005A8023 /* bca7fdafly1gax1gqd9vmj20c80ayaam.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 0068EBFE23CED034005A8023 /* bca7fdafly1gax1gqd9vmj20c80ayaam.jpg */; }; 41 | 0068EC0123CED042005A8023 /* bca7fdafly1gax1gqdhouj20c80axaam.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 0068EC0023CED042005A8023 /* bca7fdafly1gax1gqdhouj20c80axaam.jpg */; }; 42 | 0068EC0323CED0B4005A8023 /* c5aa834fly8g97m8ix9lcj20re0regnk.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 0068EC0223CED0B4005A8023 /* c5aa834fly8g97m8ix9lcj20re0regnk.jpg */; }; 43 | 0068EC0523CED176005A8023 /* c5aa834fgy1gauzr6venkj20u01hc12f.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 0068EC0423CED176005A8023 /* c5aa834fgy1gauzr6venkj20u01hc12f.jpg */; }; 44 | 0068EC0723CED187005A8023 /* c5aa834fgy1gauzr86bp5j20pb0w47in.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 0068EC0623CED187005A8023 /* c5aa834fgy1gauzr86bp5j20pb0w47in.jpg */; }; 45 | 0068EC0923CED19C005A8023 /* c5aa834fgy1gauzr8ok78j20tz12fk8w.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 0068EC0823CED19C005A8023 /* c5aa834fgy1gauzr8ok78j20tz12fk8w.jpg */; }; 46 | 0068EC0B23CED1AB005A8023 /* c5aa834fgy1gauzr95r6fj20tw0l3dq4.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 0068EC0A23CED1AB005A8023 /* c5aa834fgy1gauzr95r6fj20tw0l3dq4.jpg */; }; 47 | 0068EC0D23CED1B9005A8023 /* c5aa834fgy1gauzrb7s5ej20tz13qh5x.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 0068EC0C23CED1B9005A8023 /* c5aa834fgy1gauzrb7s5ej20tz13qh5x.jpg */; }; 48 | 0074241A23C51C3B00D13AAC /* PostImageCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0074241923C51C3B00D13AAC /* PostImageCell.swift */; }; 49 | 0080E05923C666CC006CED73 /* HomeNavigationBar.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0080E05823C666CC006CED73 /* HomeNavigationBar.swift */; }; 50 | 0080E05B23C66FBA006CED73 /* HomeView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0080E05A23C66FBA006CED73 /* HomeView.swift */; }; 51 | 0094F22023CCFCD300FC3422 /* 76297935ly8g4phfkq68hj20u00u0mzt.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 0094F21F23CCFCD300FC3422 /* 76297935ly8g4phfkq68hj20u00u0mzt.jpg */; }; 52 | 0094F22223CCFD6000FC3422 /* 76297935ly1gatz8g5rvxj22c03401kz.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 0094F22123CCFD6000FC3422 /* 76297935ly1gatz8g5rvxj22c03401kz.jpg */; }; 53 | 0094F22423CCFD7000FC3422 /* 76297935ly1gatz89dzblj23402c0qv6.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 0094F22323CCFD7000FC3422 /* 76297935ly1gatz89dzblj23402c0qv6.jpg */; }; 54 | 0094F22623CCFD8000FC3422 /* 76297935ly1gatz8k5itij22c02c01ky.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 0094F22523CCFD8000FC3422 /* 76297935ly1gatz8k5itij22c02c01ky.jpg */; }; 55 | 0094F22823CCFD9300FC3422 /* 76297935ly1gatz8obqvkj22c0340npe.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 0094F22723CCFD9300FC3422 /* 76297935ly1gatz8obqvkj22c0340npe.jpg */; }; 56 | 0094F22A23CCFF1400FC3422 /* 005tnxzUly8gab4i2r73xj30u00u0js8.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 0094F22923CCFF1400FC3422 /* 005tnxzUly8gab4i2r73xj30u00u0js8.jpg */; }; 57 | 0094F22C23CD00CB00FC3422 /* 648ed25bjw8est9nqrtnij20500503yr.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 0094F22B23CD00CB00FC3422 /* 648ed25bjw8est9nqrtnij20500503yr.jpg */; }; 58 | 0094F22E23CD017C00FC3422 /* 7f9147a5ly1fzxlgxgzpij20e90fltsj.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 0094F22D23CD017C00FC3422 /* 7f9147a5ly1fzxlgxgzpij20e90fltsj.jpg */; }; 59 | 0094F23023CD01C200FC3422 /* 7f9147a5ly1fzxlh4ovuej20e90fl4fo.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 0094F22F23CD01C200FC3422 /* 7f9147a5ly1fzxlh4ovuej20e90fl4fo.jpg */; }; 60 | 0094F23223CD01D800FC3422 /* 7f9147a5ly1fzxlh6hzdnj20e90fl7me.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 0094F23123CD01D800FC3422 /* 7f9147a5ly1fzxlh6hzdnj20e90fl7me.jpg */; }; 61 | 0094F23423CD02CC00FC3422 /* d0c21786ly8fsax1ftiifj20ro0ro43g.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 0094F23323CD02CC00FC3422 /* d0c21786ly8fsax1ftiifj20ro0ro43g.jpg */; }; 62 | 0094F23623CD033C00FC3422 /* d0c21786ly1gavj2btv6tj20c80790tg.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 0094F23523CD033C00FC3422 /* d0c21786ly1gavj2btv6tj20c80790tg.jpg */; }; 63 | 0094F23823CD035000FC3422 /* d0c21786ly1gavj2c0kcej20c8096dh7.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 0094F23723CD035000FC3422 /* d0c21786ly1gavj2c0kcej20c8096dh7.jpg */; }; 64 | 0094F23A23CD039200FC3422 /* d0c21786ly1gavj2cdrkyj20c80720tg.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 0094F23923CD039200FC3422 /* d0c21786ly1gavj2cdrkyj20c80720tg.jpg */; }; 65 | 0094F23C23CD03A600FC3422 /* d0c21786ly1gavj2cowp9j20c8083ab4.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 0094F23B23CD03A600FC3422 /* d0c21786ly1gavj2cowp9j20c8083ab4.jpg */; }; 66 | 0094F23E23CD03C000FC3422 /* d0c21786ly1gavj2d17d9j20c808zq3r.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 0094F23D23CD03BF00FC3422 /* d0c21786ly1gavj2d17d9j20c808zq3r.jpg */; }; 67 | 0094F24023CD04DA00FC3422 /* 6a2afec3jw8fb4ld0qf2gj20e80dsdfz.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 0094F23F23CD04DA00FC3422 /* 6a2afec3jw8fb4ld0qf2gj20e80dsdfz.jpg */; }; 68 | 0094F24223CD053900FC3422 /* 6a2afec3gy1gaulykcejqj20t5145wns.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 0094F24123CD053900FC3422 /* 6a2afec3gy1gaulykcejqj20t5145wns.jpg */; }; 69 | 0094F24423CD059D00FC3422 /* 006PdkDoly8ffywe2fq39j304g04gwed.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 0094F24323CD059D00FC3422 /* 006PdkDoly8ffywe2fq39j304g04gwed.jpg */; }; 70 | 0094F24623CD062200FC3422 /* 006PdkDogy1gap6ngj12ej30u011itf7.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 0094F24523CD062200FC3422 /* 006PdkDogy1gap6ngj12ej30u011itf7.jpg */; }; 71 | 0094F24823CD063500FC3422 /* 006PdkDogy1gap6ngiyn3j30u011idle.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 0094F24723CD063500FC3422 /* 006PdkDogy1gap6ngiyn3j30u011idle.jpg */; }; 72 | 0094F24A23CD09DC00FC3422 /* 6ec3b446jw1e8qgp5bmzyj2050050aa8.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 0094F24923CD09DC00FC3422 /* 6ec3b446jw1e8qgp5bmzyj2050050aa8.jpg */; }; 73 | 0094F24C23CD0A6A00FC3422 /* 6ec3b446gy1gavd4xud8lj20j60qkwj0.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 0094F24B23CD0A6A00FC3422 /* 6ec3b446gy1gavd4xud8lj20j60qkwj0.jpg */; }; 74 | 0094F24E23CD0A8500FC3422 /* 6ec3b446gy1gavd51jc4lj20j60pmwhl.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 0094F24D23CD0A8500FC3422 /* 6ec3b446gy1gavd51jc4lj20j60pmwhl.jpg */; }; 75 | 0094F25023CD0A9A00FC3422 /* 6ec3b446gy1gavd523embj20j60pytd6.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 0094F24F23CD0A9A00FC3422 /* 6ec3b446gy1gavd523embj20j60pytd6.jpg */; }; 76 | 0094F25223CD0AE900FC3422 /* 630584a6ly8fqs5wwkkmrj20ku0kuta7.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 0094F25123CD0AE900FC3422 /* 630584a6ly8fqs5wwkkmrj20ku0kuta7.jpg */; }; 77 | 0094F25423CD0B2800FC3422 /* 630584a6gy1gau54zm4dtj20m80dftbv.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 0094F25323CD0B2800FC3422 /* 630584a6gy1gau54zm4dtj20m80dftbv.jpg */; }; 78 | 0094F25623CD0B3D00FC3422 /* 630584a6gy1gau54zgaxhj20m80et0vq.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 0094F25523CD0B3D00FC3422 /* 630584a6gy1gau54zgaxhj20m80et0vq.jpg */; }; 79 | 0094F25823CD0B5F00FC3422 /* 630584a6gy1gau54zl806j20m80etmzo.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 0094F25723CD0B5F00FC3422 /* 630584a6gy1gau54zl806j20m80etmzo.jpg */; }; 80 | 0094F25A23CD0B8500FC3422 /* 630584a6gy1gau54zyj61j20m80etn07.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 0094F25923CD0B8500FC3422 /* 630584a6gy1gau54zyj61j20m80etn07.jpg */; }; 81 | 0094F25C23CD0BE000FC3422 /* 9dc7402fjw1e8qgp5bmzyj2050050aa8.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 0094F25B23CD0BE000FC3422 /* 9dc7402fjw1e8qgp5bmzyj2050050aa8.jpg */; }; 82 | 0094F25E23CD0C2A00FC3422 /* 9dc7402fgy1gavd367p0pj20j60nywic.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 0094F25D23CD0C2A00FC3422 /* 9dc7402fgy1gavd367p0pj20j60nywic.jpg */; }; 83 | 0094F26023CD0C3900FC3422 /* 9dc7402fgy1gavd38kqjtj20j60nyn1d.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 0094F25F23CD0C3900FC3422 /* 9dc7402fgy1gavd38kqjtj20j60nyn1d.jpg */; }; 84 | 0094F26223CD0C4700FC3422 /* 9dc7402fgy1gavd38wwlrj20j60nyq6y.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 0094F26123CD0C4700FC3422 /* 9dc7402fgy1gavd38wwlrj20j60nyq6y.jpg */; }; 85 | 0094F26423CD0C5500FC3422 /* 9dc7402fgy1gavd39ba15j20j60nywii.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 0094F26323CD0C5500FC3422 /* 9dc7402fgy1gavd39ba15j20j60nywii.jpg */; }; 86 | 0094F26623CD0C6200FC3422 /* 9dc7402fgy1gavd37l9nwj20j60ny44q.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 0094F26523CD0C6200FC3422 /* 9dc7402fgy1gavd37l9nwj20j60ny44q.jpg */; }; 87 | 0094F26823CD0CF700FC3422 /* 8a0b5544jw1e8qgp5bmzyj2050050aa8.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 0094F26723CD0CF700FC3422 /* 8a0b5544jw1e8qgp5bmzyj2050050aa8.jpg */; }; 88 | 0094F26A23CD0D5900FC3422 /* 8a0b5544gy1gauy2g35yoj20u00fomzf.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 0094F26923CD0D5900FC3422 /* 8a0b5544gy1gauy2g35yoj20u00fomzf.jpg */; }; 89 | 0094F26C23CD0D6900FC3422 /* 8a0b5544gy1gauy2ex786j20u0129aed.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 0094F26B23CD0D6900FC3422 /* 8a0b5544gy1gauy2ex786j20u0129aed.jpg */; }; 90 | 0094F26E23CD0D7A00FC3422 /* 8a0b5544gy1gauy2gmkg9j20u00gegnp.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 0094F26D23CD0D7A00FC3422 /* 8a0b5544gy1gauy2gmkg9j20u00gegnp.jpg */; }; 91 | 0094F27023CD0D8E00FC3422 /* 8a0b5544gy1gauy2gz000j20u00n6wgj.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 0094F26F23CD0D8E00FC3422 /* 8a0b5544gy1gauy2gz000j20u00n6wgj.jpg */; }; 92 | 0094F27223CD0DA600FC3422 /* 8a0b5544gy1gauy2hcozsj20u01czdiy.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 0094F27123CD0DA500FC3422 /* 8a0b5544gy1gauy2hcozsj20u01czdiy.jpg */; }; 93 | 0094F27423CD0DC200FC3422 /* 8a0b5544gy1gauy2flua6j20u00hitab.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 0094F27323CD0DC200FC3422 /* 8a0b5544gy1gauy2flua6j20u00hitab.jpg */; }; 94 | 0094F27623CD0F4500FC3422 /* 700a34f6ly8g9a29rjt92j20fn0iqdg8.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 0094F27523CD0F4500FC3422 /* 700a34f6ly8g9a29rjt92j20fn0iqdg8.jpg */; }; 95 | 0094F27823CD0FAA00FC3422 /* 700a34f6gy1gaunsx2jywj20j60pkaeu.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 0094F27723CD0FAA00FC3422 /* 700a34f6gy1gaunsx2jywj20j60pkaeu.jpg */; }; 96 | 0094F27A23CD0FC000FC3422 /* 700a34f6gy1gaunswxtlrj20j60pkgok.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 0094F27923CD0FC000FC3422 /* 700a34f6gy1gaunswxtlrj20j60pkgok.jpg */; }; 97 | 0094F27C23CD0FD300FC3422 /* 700a34f6gy1gaunswy5qnj20j60pkadk.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 0094F27B23CD0FD300FC3422 /* 700a34f6gy1gaunswy5qnj20j60pkadk.jpg */; }; 98 | 0094F27E23CD0FE100FC3422 /* 700a34f6gy1gaunswwui7j20j60pl78e.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 0094F27D23CD0FE100FC3422 /* 700a34f6gy1gaunswwui7j20j60pl78e.jpg */; }; 99 | 0094F28023CD0FF800FC3422 /* 700a34f6gy1gaunsxgzixj20j60edmz8.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 0094F27F23CD0FF800FC3422 /* 700a34f6gy1gaunsxgzixj20j60edmz8.jpg */; }; 100 | 0094F28223CD100D00FC3422 /* 700a34f6gy1gaunsxhp4pj20j60pkn1k.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 0094F28123CD100D00FC3422 /* 700a34f6gy1gaunsxhp4pj20j60pkn1k.jpg */; }; 101 | 0094F28423CD107000FC3422 /* 006gWxMEly8g0bjpl3ynij30kv0kv773.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 0094F28323CD107000FC3422 /* 006gWxMEly8g0bjpl3ynij30kv0kv773.jpg */; }; 102 | 0094F28623CD10AD00FC3422 /* 006gWxMEly1gavap86qr9j30ht0qo40t.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 0094F28523CD10AD00FC3422 /* 006gWxMEly1gavap86qr9j30ht0qo40t.jpg */; }; 103 | 0094F28823CD10BD00FC3422 /* 006gWxMEly1gavap8dywoj30hs0bwq48.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 0094F28723CD10BD00FC3422 /* 006gWxMEly1gavap8dywoj30hs0bwq48.jpg */; }; 104 | 0094F28A23CD10D900FC3422 /* 006gWxMEly1gavap8vsqaj30hs0bwgm6.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 0094F28923CD10D900FC3422 /* 006gWxMEly1gavap8vsqaj30hs0bwgm6.jpg */; }; 105 | 0094F28C23CD10EB00FC3422 /* 006gWxMEly1gavap88gttj30hs0a0dgf.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 0094F28B23CD10EB00FC3422 /* 006gWxMEly1gavap88gttj30hs0a0dgf.jpg */; }; 106 | 0094F28E23CD124300FC3422 /* 8697cf1ely8gashxj3b09j20u00u040v.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 0094F28D23CD124300FC3422 /* 8697cf1ely8gashxj3b09j20u00u040v.jpg */; }; 107 | 0094F29023CD2E7800FC3422 /* PostDetailView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0094F28F23CD2E7800FC3422 /* PostDetailView.swift */; }; 108 | 0094F29223CD40CE00FC3422 /* UserData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0094F29123CD40CD00FC3422 /* UserData.swift */; }; 109 | 0094F29523CD890D00FC3422 /* PostListData_hot_1.json in Resources */ = {isa = PBXBuildFile; fileRef = 0094F29323CD890D00FC3422 /* PostListData_hot_1.json */; }; 110 | 0094F29623CD890D00FC3422 /* PostListData_recommend_1.json in Resources */ = {isa = PBXBuildFile; fileRef = 0094F29423CD890D00FC3422 /* PostListData_recommend_1.json */; }; 111 | 00D7B8C323D2382C004918E8 /* PostVIPBadge.swift in Sources */ = {isa = PBXBuildFile; fileRef = 00D7B8C223D2382C004918E8 /* PostVIPBadge.swift */; }; 112 | /* End PBXBuildFile section */ 113 | 114 | /* Begin PBXFileReference section */ 115 | 002274F923C3BB3600014786 /* PostDemo.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = PostDemo.app; sourceTree = BUILT_PRODUCTS_DIR; }; 116 | 002274FC23C3BB3600014786 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 117 | 002274FE23C3BB3600014786 /* SceneDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SceneDelegate.swift; sourceTree = ""; }; 118 | 0022750023C3BB3600014786 /* PostListView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PostListView.swift; sourceTree = ""; }; 119 | 0022750223C3BB3800014786 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 120 | 0022750523C3BB3800014786 /* Preview Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = "Preview Assets.xcassets"; sourceTree = ""; }; 121 | 0022750823C3BB3800014786 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 122 | 0022750A23C3BB3800014786 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 123 | 0022751123C3C15900014786 /* 4e7f0c83gy1gam2ml6nucj22tc240kjl.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = 4e7f0c83gy1gam2ml6nucj22tc240kjl.jpg; sourceTree = ""; }; 124 | 0022751223C3C15900014786 /* 4e7f0c83gy1gam2mjhk8zj21hc0v6wnx.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = 4e7f0c83gy1gam2mjhk8zj21hc0v6wnx.jpg; sourceTree = ""; }; 125 | 0022751323C3C15900014786 /* 4e7f0c83ly8g1ho507078j20ro0rojtq.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = 4e7f0c83ly8g1ho507078j20ro0rojtq.jpg; sourceTree = ""; }; 126 | 0022751423C3C15900014786 /* 4e7f0c83gy1gam2mn58d3j22tc240qv5.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = 4e7f0c83gy1gam2mn58d3j22tc240qv5.jpg; sourceTree = ""; }; 127 | 0022751523C3C15900014786 /* 4e7f0c83gy1gam2mr1b81j22tc2407wi.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = 4e7f0c83gy1gam2mr1b81j22tc2407wi.jpg; sourceTree = ""; }; 128 | 0022751623C3C15900014786 /* 4e7f0c83gy1gam2mp0x4pj22tc240u0x.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = 4e7f0c83gy1gam2mp0x4pj22tc240u0x.jpg; sourceTree = ""; }; 129 | 0022751723C3C15900014786 /* 4e7f0c83gy1gam2misv31j21hc0u016k.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = 4e7f0c83gy1gam2misv31j21hc0u016k.jpg; sourceTree = ""; }; 130 | 0022751F23C3C36A00014786 /* PostCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PostCell.swift; sourceTree = ""; }; 131 | 0022752123C3C3AB00014786 /* Post.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Post.swift; sourceTree = ""; }; 132 | 0041E47423C90BD3006EDCD6 /* HScrollViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HScrollViewController.swift; sourceTree = ""; }; 133 | 005DCA6023C5639D00845B12 /* PostCellToolbarButton.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PostCellToolbarButton.swift; sourceTree = ""; }; 134 | 0068EB9823CE4430005A8023 /* CommentTextView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CommentTextView.swift; sourceTree = ""; }; 135 | 0068EBE023CE8DF7005A8023 /* KeyboardResponder.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KeyboardResponder.swift; sourceTree = ""; }; 136 | 0068EBE423CE950D005A8023 /* CommentInputView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CommentInputView.swift; sourceTree = ""; }; 137 | 0068EBE623CECD48005A8023 /* eb5c94aely8fmvumnl9baj20v90v9q49.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = eb5c94aely8fmvumnl9baj20v90v9q49.jpg; sourceTree = ""; }; 138 | 0068EBEA23CECDB1005A8023 /* eb5c94aegy1gav2509cp5j20zk0k0n2j.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = eb5c94aegy1gav2509cp5j20zk0k0n2j.jpg; sourceTree = ""; }; 139 | 0068EBEE23CECDE0005A8023 /* eb5c94aegy1gav26fycwlj20zk1h8drh.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = eb5c94aegy1gav26fycwlj20zk1h8drh.jpg; sourceTree = ""; }; 140 | 0068EBF023CECDFD005A8023 /* eb5c94aegy1gav25ox6dvj20u00k1go9.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = eb5c94aegy1gav25ox6dvj20u00k1go9.jpg; sourceTree = ""; }; 141 | 0068EBF223CECE21005A8023 /* eb5c94aegy1gav25n5ibjj20zk1h8wuu.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = eb5c94aegy1gav25n5ibjj20zk1h8wuu.jpg; sourceTree = ""; }; 142 | 0068EBF423CECF7B005A8023 /* bca7fdafgw1ekhkps65b1j2050050dg4.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = bca7fdafgw1ekhkps65b1j2050050dg4.jpg; sourceTree = ""; }; 143 | 0068EBF623CECFEC005A8023 /* bca7fdafly1gax1gqdg6qj20c80avdgl.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = bca7fdafly1gax1gqdg6qj20c80avdgl.jpg; sourceTree = ""; }; 144 | 0068EBF823CED001005A8023 /* bca7fdafly1gax1gqdnboj20c80atmxp.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = bca7fdafly1gax1gqdnboj20c80atmxp.jpg; sourceTree = ""; }; 145 | 0068EBFA23CED011005A8023 /* bca7fdafly1gax1gqehdaj20c80atq3x.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = bca7fdafly1gax1gqehdaj20c80atq3x.jpg; sourceTree = ""; }; 146 | 0068EBFC23CED020005A8023 /* bca7fdafly1gax1gqfgsjj20c80axaay.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = bca7fdafly1gax1gqfgsjj20c80axaay.jpg; sourceTree = ""; }; 147 | 0068EBFE23CED034005A8023 /* bca7fdafly1gax1gqd9vmj20c80ayaam.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = bca7fdafly1gax1gqd9vmj20c80ayaam.jpg; sourceTree = ""; }; 148 | 0068EC0023CED042005A8023 /* bca7fdafly1gax1gqdhouj20c80axaam.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = bca7fdafly1gax1gqdhouj20c80axaam.jpg; sourceTree = ""; }; 149 | 0068EC0223CED0B4005A8023 /* c5aa834fly8g97m8ix9lcj20re0regnk.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = c5aa834fly8g97m8ix9lcj20re0regnk.jpg; sourceTree = ""; }; 150 | 0068EC0423CED176005A8023 /* c5aa834fgy1gauzr6venkj20u01hc12f.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = c5aa834fgy1gauzr6venkj20u01hc12f.jpg; sourceTree = ""; }; 151 | 0068EC0623CED187005A8023 /* c5aa834fgy1gauzr86bp5j20pb0w47in.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = c5aa834fgy1gauzr86bp5j20pb0w47in.jpg; sourceTree = ""; }; 152 | 0068EC0823CED19C005A8023 /* c5aa834fgy1gauzr8ok78j20tz12fk8w.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = c5aa834fgy1gauzr8ok78j20tz12fk8w.jpg; sourceTree = ""; }; 153 | 0068EC0A23CED1AB005A8023 /* c5aa834fgy1gauzr95r6fj20tw0l3dq4.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = c5aa834fgy1gauzr95r6fj20tw0l3dq4.jpg; sourceTree = ""; }; 154 | 0068EC0C23CED1B9005A8023 /* c5aa834fgy1gauzrb7s5ej20tz13qh5x.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = c5aa834fgy1gauzrb7s5ej20tz13qh5x.jpg; sourceTree = ""; }; 155 | 0074241923C51C3B00D13AAC /* PostImageCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PostImageCell.swift; sourceTree = ""; }; 156 | 0080E05823C666CC006CED73 /* HomeNavigationBar.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HomeNavigationBar.swift; sourceTree = ""; }; 157 | 0080E05A23C66FBA006CED73 /* HomeView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HomeView.swift; sourceTree = ""; }; 158 | 0094F21F23CCFCD300FC3422 /* 76297935ly8g4phfkq68hj20u00u0mzt.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = 76297935ly8g4phfkq68hj20u00u0mzt.jpg; sourceTree = ""; }; 159 | 0094F22123CCFD6000FC3422 /* 76297935ly1gatz8g5rvxj22c03401kz.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = 76297935ly1gatz8g5rvxj22c03401kz.jpg; sourceTree = ""; }; 160 | 0094F22323CCFD7000FC3422 /* 76297935ly1gatz89dzblj23402c0qv6.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = 76297935ly1gatz89dzblj23402c0qv6.jpg; sourceTree = ""; }; 161 | 0094F22523CCFD8000FC3422 /* 76297935ly1gatz8k5itij22c02c01ky.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = 76297935ly1gatz8k5itij22c02c01ky.jpg; sourceTree = ""; }; 162 | 0094F22723CCFD9300FC3422 /* 76297935ly1gatz8obqvkj22c0340npe.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = 76297935ly1gatz8obqvkj22c0340npe.jpg; sourceTree = ""; }; 163 | 0094F22923CCFF1400FC3422 /* 005tnxzUly8gab4i2r73xj30u00u0js8.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = 005tnxzUly8gab4i2r73xj30u00u0js8.jpg; sourceTree = ""; }; 164 | 0094F22B23CD00CB00FC3422 /* 648ed25bjw8est9nqrtnij20500503yr.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = 648ed25bjw8est9nqrtnij20500503yr.jpg; sourceTree = ""; }; 165 | 0094F22D23CD017C00FC3422 /* 7f9147a5ly1fzxlgxgzpij20e90fltsj.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = 7f9147a5ly1fzxlgxgzpij20e90fltsj.jpg; sourceTree = ""; }; 166 | 0094F22F23CD01C200FC3422 /* 7f9147a5ly1fzxlh4ovuej20e90fl4fo.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = 7f9147a5ly1fzxlh4ovuej20e90fl4fo.jpg; sourceTree = ""; }; 167 | 0094F23123CD01D800FC3422 /* 7f9147a5ly1fzxlh6hzdnj20e90fl7me.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = 7f9147a5ly1fzxlh6hzdnj20e90fl7me.jpg; sourceTree = ""; }; 168 | 0094F23323CD02CC00FC3422 /* d0c21786ly8fsax1ftiifj20ro0ro43g.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = d0c21786ly8fsax1ftiifj20ro0ro43g.jpg; sourceTree = ""; }; 169 | 0094F23523CD033C00FC3422 /* d0c21786ly1gavj2btv6tj20c80790tg.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = d0c21786ly1gavj2btv6tj20c80790tg.jpg; sourceTree = ""; }; 170 | 0094F23723CD035000FC3422 /* d0c21786ly1gavj2c0kcej20c8096dh7.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = d0c21786ly1gavj2c0kcej20c8096dh7.jpg; sourceTree = ""; }; 171 | 0094F23923CD039200FC3422 /* d0c21786ly1gavj2cdrkyj20c80720tg.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = d0c21786ly1gavj2cdrkyj20c80720tg.jpg; sourceTree = ""; }; 172 | 0094F23B23CD03A600FC3422 /* d0c21786ly1gavj2cowp9j20c8083ab4.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = d0c21786ly1gavj2cowp9j20c8083ab4.jpg; sourceTree = ""; }; 173 | 0094F23D23CD03BF00FC3422 /* d0c21786ly1gavj2d17d9j20c808zq3r.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = d0c21786ly1gavj2d17d9j20c808zq3r.jpg; sourceTree = ""; }; 174 | 0094F23F23CD04DA00FC3422 /* 6a2afec3jw8fb4ld0qf2gj20e80dsdfz.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = 6a2afec3jw8fb4ld0qf2gj20e80dsdfz.jpg; sourceTree = ""; }; 175 | 0094F24123CD053900FC3422 /* 6a2afec3gy1gaulykcejqj20t5145wns.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = 6a2afec3gy1gaulykcejqj20t5145wns.jpg; sourceTree = ""; }; 176 | 0094F24323CD059D00FC3422 /* 006PdkDoly8ffywe2fq39j304g04gwed.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = 006PdkDoly8ffywe2fq39j304g04gwed.jpg; sourceTree = ""; }; 177 | 0094F24523CD062200FC3422 /* 006PdkDogy1gap6ngj12ej30u011itf7.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = 006PdkDogy1gap6ngj12ej30u011itf7.jpg; sourceTree = ""; }; 178 | 0094F24723CD063500FC3422 /* 006PdkDogy1gap6ngiyn3j30u011idle.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = 006PdkDogy1gap6ngiyn3j30u011idle.jpg; sourceTree = ""; }; 179 | 0094F24923CD09DC00FC3422 /* 6ec3b446jw1e8qgp5bmzyj2050050aa8.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = 6ec3b446jw1e8qgp5bmzyj2050050aa8.jpg; sourceTree = ""; }; 180 | 0094F24B23CD0A6A00FC3422 /* 6ec3b446gy1gavd4xud8lj20j60qkwj0.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = 6ec3b446gy1gavd4xud8lj20j60qkwj0.jpg; sourceTree = ""; }; 181 | 0094F24D23CD0A8500FC3422 /* 6ec3b446gy1gavd51jc4lj20j60pmwhl.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = 6ec3b446gy1gavd51jc4lj20j60pmwhl.jpg; sourceTree = ""; }; 182 | 0094F24F23CD0A9A00FC3422 /* 6ec3b446gy1gavd523embj20j60pytd6.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = 6ec3b446gy1gavd523embj20j60pytd6.jpg; sourceTree = ""; }; 183 | 0094F25123CD0AE900FC3422 /* 630584a6ly8fqs5wwkkmrj20ku0kuta7.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = 630584a6ly8fqs5wwkkmrj20ku0kuta7.jpg; sourceTree = ""; }; 184 | 0094F25323CD0B2800FC3422 /* 630584a6gy1gau54zm4dtj20m80dftbv.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = 630584a6gy1gau54zm4dtj20m80dftbv.jpg; sourceTree = ""; }; 185 | 0094F25523CD0B3D00FC3422 /* 630584a6gy1gau54zgaxhj20m80et0vq.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = 630584a6gy1gau54zgaxhj20m80et0vq.jpg; sourceTree = ""; }; 186 | 0094F25723CD0B5F00FC3422 /* 630584a6gy1gau54zl806j20m80etmzo.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = 630584a6gy1gau54zl806j20m80etmzo.jpg; sourceTree = ""; }; 187 | 0094F25923CD0B8500FC3422 /* 630584a6gy1gau54zyj61j20m80etn07.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = 630584a6gy1gau54zyj61j20m80etn07.jpg; sourceTree = ""; }; 188 | 0094F25B23CD0BE000FC3422 /* 9dc7402fjw1e8qgp5bmzyj2050050aa8.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = 9dc7402fjw1e8qgp5bmzyj2050050aa8.jpg; sourceTree = ""; }; 189 | 0094F25D23CD0C2A00FC3422 /* 9dc7402fgy1gavd367p0pj20j60nywic.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = 9dc7402fgy1gavd367p0pj20j60nywic.jpg; sourceTree = ""; }; 190 | 0094F25F23CD0C3900FC3422 /* 9dc7402fgy1gavd38kqjtj20j60nyn1d.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = 9dc7402fgy1gavd38kqjtj20j60nyn1d.jpg; sourceTree = ""; }; 191 | 0094F26123CD0C4700FC3422 /* 9dc7402fgy1gavd38wwlrj20j60nyq6y.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = 9dc7402fgy1gavd38wwlrj20j60nyq6y.jpg; sourceTree = ""; }; 192 | 0094F26323CD0C5500FC3422 /* 9dc7402fgy1gavd39ba15j20j60nywii.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = 9dc7402fgy1gavd39ba15j20j60nywii.jpg; sourceTree = ""; }; 193 | 0094F26523CD0C6200FC3422 /* 9dc7402fgy1gavd37l9nwj20j60ny44q.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = 9dc7402fgy1gavd37l9nwj20j60ny44q.jpg; sourceTree = ""; }; 194 | 0094F26723CD0CF700FC3422 /* 8a0b5544jw1e8qgp5bmzyj2050050aa8.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = 8a0b5544jw1e8qgp5bmzyj2050050aa8.jpg; sourceTree = ""; }; 195 | 0094F26923CD0D5900FC3422 /* 8a0b5544gy1gauy2g35yoj20u00fomzf.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = 8a0b5544gy1gauy2g35yoj20u00fomzf.jpg; sourceTree = ""; }; 196 | 0094F26B23CD0D6900FC3422 /* 8a0b5544gy1gauy2ex786j20u0129aed.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = 8a0b5544gy1gauy2ex786j20u0129aed.jpg; sourceTree = ""; }; 197 | 0094F26D23CD0D7A00FC3422 /* 8a0b5544gy1gauy2gmkg9j20u00gegnp.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = 8a0b5544gy1gauy2gmkg9j20u00gegnp.jpg; sourceTree = ""; }; 198 | 0094F26F23CD0D8E00FC3422 /* 8a0b5544gy1gauy2gz000j20u00n6wgj.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = 8a0b5544gy1gauy2gz000j20u00n6wgj.jpg; sourceTree = ""; }; 199 | 0094F27123CD0DA500FC3422 /* 8a0b5544gy1gauy2hcozsj20u01czdiy.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = 8a0b5544gy1gauy2hcozsj20u01czdiy.jpg; sourceTree = ""; }; 200 | 0094F27323CD0DC200FC3422 /* 8a0b5544gy1gauy2flua6j20u00hitab.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = 8a0b5544gy1gauy2flua6j20u00hitab.jpg; sourceTree = ""; }; 201 | 0094F27523CD0F4500FC3422 /* 700a34f6ly8g9a29rjt92j20fn0iqdg8.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = 700a34f6ly8g9a29rjt92j20fn0iqdg8.jpg; sourceTree = ""; }; 202 | 0094F27723CD0FAA00FC3422 /* 700a34f6gy1gaunsx2jywj20j60pkaeu.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = 700a34f6gy1gaunsx2jywj20j60pkaeu.jpg; sourceTree = ""; }; 203 | 0094F27923CD0FC000FC3422 /* 700a34f6gy1gaunswxtlrj20j60pkgok.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = 700a34f6gy1gaunswxtlrj20j60pkgok.jpg; sourceTree = ""; }; 204 | 0094F27B23CD0FD300FC3422 /* 700a34f6gy1gaunswy5qnj20j60pkadk.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = 700a34f6gy1gaunswy5qnj20j60pkadk.jpg; sourceTree = ""; }; 205 | 0094F27D23CD0FE100FC3422 /* 700a34f6gy1gaunswwui7j20j60pl78e.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = 700a34f6gy1gaunswwui7j20j60pl78e.jpg; sourceTree = ""; }; 206 | 0094F27F23CD0FF800FC3422 /* 700a34f6gy1gaunsxgzixj20j60edmz8.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = 700a34f6gy1gaunsxgzixj20j60edmz8.jpg; sourceTree = ""; }; 207 | 0094F28123CD100D00FC3422 /* 700a34f6gy1gaunsxhp4pj20j60pkn1k.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = 700a34f6gy1gaunsxhp4pj20j60pkn1k.jpg; sourceTree = ""; }; 208 | 0094F28323CD107000FC3422 /* 006gWxMEly8g0bjpl3ynij30kv0kv773.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = 006gWxMEly8g0bjpl3ynij30kv0kv773.jpg; sourceTree = ""; }; 209 | 0094F28523CD10AD00FC3422 /* 006gWxMEly1gavap86qr9j30ht0qo40t.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = 006gWxMEly1gavap86qr9j30ht0qo40t.jpg; sourceTree = ""; }; 210 | 0094F28723CD10BD00FC3422 /* 006gWxMEly1gavap8dywoj30hs0bwq48.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = 006gWxMEly1gavap8dywoj30hs0bwq48.jpg; sourceTree = ""; }; 211 | 0094F28923CD10D900FC3422 /* 006gWxMEly1gavap8vsqaj30hs0bwgm6.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = 006gWxMEly1gavap8vsqaj30hs0bwgm6.jpg; sourceTree = ""; }; 212 | 0094F28B23CD10EB00FC3422 /* 006gWxMEly1gavap88gttj30hs0a0dgf.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = 006gWxMEly1gavap88gttj30hs0a0dgf.jpg; sourceTree = ""; }; 213 | 0094F28D23CD124300FC3422 /* 8697cf1ely8gashxj3b09j20u00u040v.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = 8697cf1ely8gashxj3b09j20u00u040v.jpg; sourceTree = ""; }; 214 | 0094F28F23CD2E7800FC3422 /* PostDetailView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PostDetailView.swift; sourceTree = ""; }; 215 | 0094F29123CD40CD00FC3422 /* UserData.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UserData.swift; sourceTree = ""; }; 216 | 0094F29323CD890D00FC3422 /* PostListData_hot_1.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = PostListData_hot_1.json; sourceTree = ""; }; 217 | 0094F29423CD890D00FC3422 /* PostListData_recommend_1.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = PostListData_recommend_1.json; sourceTree = ""; }; 218 | 00D7B8C223D2382C004918E8 /* PostVIPBadge.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PostVIPBadge.swift; sourceTree = ""; }; 219 | /* End PBXFileReference section */ 220 | 221 | /* Begin PBXFrameworksBuildPhase section */ 222 | 002274F623C3BB3600014786 /* Frameworks */ = { 223 | isa = PBXFrameworksBuildPhase; 224 | buildActionMask = 2147483647; 225 | files = ( 226 | ); 227 | runOnlyForDeploymentPostprocessing = 0; 228 | }; 229 | /* End PBXFrameworksBuildPhase section */ 230 | 231 | /* Begin PBXGroup section */ 232 | 002274F023C3BB3600014786 = { 233 | isa = PBXGroup; 234 | children = ( 235 | 002274FB23C3BB3600014786 /* PostDemo */, 236 | 002274FA23C3BB3600014786 /* Products */, 237 | ); 238 | sourceTree = ""; 239 | }; 240 | 002274FA23C3BB3600014786 /* Products */ = { 241 | isa = PBXGroup; 242 | children = ( 243 | 002274F923C3BB3600014786 /* PostDemo.app */, 244 | ); 245 | name = Products; 246 | sourceTree = ""; 247 | }; 248 | 002274FB23C3BB3600014786 /* PostDemo */ = { 249 | isa = PBXGroup; 250 | children = ( 251 | 002274FC23C3BB3600014786 /* AppDelegate.swift */, 252 | 002274FE23C3BB3600014786 /* SceneDelegate.swift */, 253 | 0080E05A23C66FBA006CED73 /* HomeView.swift */, 254 | 0080E05823C666CC006CED73 /* HomeNavigationBar.swift */, 255 | 0041E47423C90BD3006EDCD6 /* HScrollViewController.swift */, 256 | 0022750023C3BB3600014786 /* PostListView.swift */, 257 | 0022751F23C3C36A00014786 /* PostCell.swift */, 258 | 00D7B8C223D2382C004918E8 /* PostVIPBadge.swift */, 259 | 0074241923C51C3B00D13AAC /* PostImageCell.swift */, 260 | 005DCA6023C5639D00845B12 /* PostCellToolbarButton.swift */, 261 | 0094F28F23CD2E7800FC3422 /* PostDetailView.swift */, 262 | 0068EBE423CE950D005A8023 /* CommentInputView.swift */, 263 | 0068EB9823CE4430005A8023 /* CommentTextView.swift */, 264 | 0068EBE023CE8DF7005A8023 /* KeyboardResponder.swift */, 265 | 0022752123C3C3AB00014786 /* Post.swift */, 266 | 0094F29123CD40CD00FC3422 /* UserData.swift */, 267 | 0022751023C3C0FD00014786 /* Resources */, 268 | 0022750223C3BB3800014786 /* Assets.xcassets */, 269 | 0022750723C3BB3800014786 /* LaunchScreen.storyboard */, 270 | 0022750A23C3BB3800014786 /* Info.plist */, 271 | 0022750423C3BB3800014786 /* Preview Content */, 272 | ); 273 | path = PostDemo; 274 | sourceTree = ""; 275 | }; 276 | 0022750423C3BB3800014786 /* Preview Content */ = { 277 | isa = PBXGroup; 278 | children = ( 279 | 0022750523C3BB3800014786 /* Preview Assets.xcassets */, 280 | ); 281 | path = "Preview Content"; 282 | sourceTree = ""; 283 | }; 284 | 0022751023C3C0FD00014786 /* Resources */ = { 285 | isa = PBXGroup; 286 | children = ( 287 | 0094F29423CD890D00FC3422 /* PostListData_recommend_1.json */, 288 | 0094F29323CD890D00FC3422 /* PostListData_hot_1.json */, 289 | 0022751723C3C15900014786 /* 4e7f0c83gy1gam2misv31j21hc0u016k.jpg */, 290 | 0022751223C3C15900014786 /* 4e7f0c83gy1gam2mjhk8zj21hc0v6wnx.jpg */, 291 | 0022751123C3C15900014786 /* 4e7f0c83gy1gam2ml6nucj22tc240kjl.jpg */, 292 | 0022751423C3C15900014786 /* 4e7f0c83gy1gam2mn58d3j22tc240qv5.jpg */, 293 | 0022751623C3C15900014786 /* 4e7f0c83gy1gam2mp0x4pj22tc240u0x.jpg */, 294 | 0022751523C3C15900014786 /* 4e7f0c83gy1gam2mr1b81j22tc2407wi.jpg */, 295 | 0022751323C3C15900014786 /* 4e7f0c83ly8g1ho507078j20ro0rojtq.jpg */, 296 | 0094F22123CCFD6000FC3422 /* 76297935ly1gatz8g5rvxj22c03401kz.jpg */, 297 | 0094F22323CCFD7000FC3422 /* 76297935ly1gatz89dzblj23402c0qv6.jpg */, 298 | 0094F22523CCFD8000FC3422 /* 76297935ly1gatz8k5itij22c02c01ky.jpg */, 299 | 0094F22723CCFD9300FC3422 /* 76297935ly1gatz8obqvkj22c0340npe.jpg */, 300 | 0094F21F23CCFCD300FC3422 /* 76297935ly8g4phfkq68hj20u00u0mzt.jpg */, 301 | 0094F22D23CD017C00FC3422 /* 7f9147a5ly1fzxlgxgzpij20e90fltsj.jpg */, 302 | 0094F22F23CD01C200FC3422 /* 7f9147a5ly1fzxlh4ovuej20e90fl4fo.jpg */, 303 | 0094F23123CD01D800FC3422 /* 7f9147a5ly1fzxlh6hzdnj20e90fl7me.jpg */, 304 | 0094F22B23CD00CB00FC3422 /* 648ed25bjw8est9nqrtnij20500503yr.jpg */, 305 | 0094F23523CD033C00FC3422 /* d0c21786ly1gavj2btv6tj20c80790tg.jpg */, 306 | 0094F23723CD035000FC3422 /* d0c21786ly1gavj2c0kcej20c8096dh7.jpg */, 307 | 0094F23923CD039200FC3422 /* d0c21786ly1gavj2cdrkyj20c80720tg.jpg */, 308 | 0094F23B23CD03A600FC3422 /* d0c21786ly1gavj2cowp9j20c8083ab4.jpg */, 309 | 0094F23D23CD03BF00FC3422 /* d0c21786ly1gavj2d17d9j20c808zq3r.jpg */, 310 | 0094F23323CD02CC00FC3422 /* d0c21786ly8fsax1ftiifj20ro0ro43g.jpg */, 311 | 0094F22923CCFF1400FC3422 /* 005tnxzUly8gab4i2r73xj30u00u0js8.jpg */, 312 | 0068EBEA23CECDB1005A8023 /* eb5c94aegy1gav2509cp5j20zk0k0n2j.jpg */, 313 | 0068EBEE23CECDE0005A8023 /* eb5c94aegy1gav26fycwlj20zk1h8drh.jpg */, 314 | 0068EBF023CECDFD005A8023 /* eb5c94aegy1gav25ox6dvj20u00k1go9.jpg */, 315 | 0068EBF223CECE21005A8023 /* eb5c94aegy1gav25n5ibjj20zk1h8wuu.jpg */, 316 | 0068EBE623CECD48005A8023 /* eb5c94aely8fmvumnl9baj20v90v9q49.jpg */, 317 | 0068EBF623CECFEC005A8023 /* bca7fdafly1gax1gqdg6qj20c80avdgl.jpg */, 318 | 0068EBF823CED001005A8023 /* bca7fdafly1gax1gqdnboj20c80atmxp.jpg */, 319 | 0068EBFA23CED011005A8023 /* bca7fdafly1gax1gqehdaj20c80atq3x.jpg */, 320 | 0068EBFC23CED020005A8023 /* bca7fdafly1gax1gqfgsjj20c80axaay.jpg */, 321 | 0068EBFE23CED034005A8023 /* bca7fdafly1gax1gqd9vmj20c80ayaam.jpg */, 322 | 0068EC0023CED042005A8023 /* bca7fdafly1gax1gqdhouj20c80axaam.jpg */, 323 | 0068EBF423CECF7B005A8023 /* bca7fdafgw1ekhkps65b1j2050050dg4.jpg */, 324 | 0068EC0423CED176005A8023 /* c5aa834fgy1gauzr6venkj20u01hc12f.jpg */, 325 | 0068EC0623CED187005A8023 /* c5aa834fgy1gauzr86bp5j20pb0w47in.jpg */, 326 | 0068EC0823CED19C005A8023 /* c5aa834fgy1gauzr8ok78j20tz12fk8w.jpg */, 327 | 0068EC0A23CED1AB005A8023 /* c5aa834fgy1gauzr95r6fj20tw0l3dq4.jpg */, 328 | 0068EC0C23CED1B9005A8023 /* c5aa834fgy1gauzrb7s5ej20tz13qh5x.jpg */, 329 | 0068EC0223CED0B4005A8023 /* c5aa834fly8g97m8ix9lcj20re0regnk.jpg */, 330 | 0094F24123CD053900FC3422 /* 6a2afec3gy1gaulykcejqj20t5145wns.jpg */, 331 | 0094F23F23CD04DA00FC3422 /* 6a2afec3jw8fb4ld0qf2gj20e80dsdfz.jpg */, 332 | 0094F24523CD062200FC3422 /* 006PdkDogy1gap6ngj12ej30u011itf7.jpg */, 333 | 0094F24723CD063500FC3422 /* 006PdkDogy1gap6ngiyn3j30u011idle.jpg */, 334 | 0094F24323CD059D00FC3422 /* 006PdkDoly8ffywe2fq39j304g04gwed.jpg */, 335 | 0094F24B23CD0A6A00FC3422 /* 6ec3b446gy1gavd4xud8lj20j60qkwj0.jpg */, 336 | 0094F24D23CD0A8500FC3422 /* 6ec3b446gy1gavd51jc4lj20j60pmwhl.jpg */, 337 | 0094F24F23CD0A9A00FC3422 /* 6ec3b446gy1gavd523embj20j60pytd6.jpg */, 338 | 0094F24923CD09DC00FC3422 /* 6ec3b446jw1e8qgp5bmzyj2050050aa8.jpg */, 339 | 0094F25323CD0B2800FC3422 /* 630584a6gy1gau54zm4dtj20m80dftbv.jpg */, 340 | 0094F25523CD0B3D00FC3422 /* 630584a6gy1gau54zgaxhj20m80et0vq.jpg */, 341 | 0094F25723CD0B5F00FC3422 /* 630584a6gy1gau54zl806j20m80etmzo.jpg */, 342 | 0094F25923CD0B8500FC3422 /* 630584a6gy1gau54zyj61j20m80etn07.jpg */, 343 | 0094F25123CD0AE900FC3422 /* 630584a6ly8fqs5wwkkmrj20ku0kuta7.jpg */, 344 | 0094F25D23CD0C2A00FC3422 /* 9dc7402fgy1gavd367p0pj20j60nywic.jpg */, 345 | 0094F25F23CD0C3900FC3422 /* 9dc7402fgy1gavd38kqjtj20j60nyn1d.jpg */, 346 | 0094F26123CD0C4700FC3422 /* 9dc7402fgy1gavd38wwlrj20j60nyq6y.jpg */, 347 | 0094F26323CD0C5500FC3422 /* 9dc7402fgy1gavd39ba15j20j60nywii.jpg */, 348 | 0094F26523CD0C6200FC3422 /* 9dc7402fgy1gavd37l9nwj20j60ny44q.jpg */, 349 | 0094F25B23CD0BE000FC3422 /* 9dc7402fjw1e8qgp5bmzyj2050050aa8.jpg */, 350 | 0094F26923CD0D5900FC3422 /* 8a0b5544gy1gauy2g35yoj20u00fomzf.jpg */, 351 | 0094F26B23CD0D6900FC3422 /* 8a0b5544gy1gauy2ex786j20u0129aed.jpg */, 352 | 0094F26D23CD0D7A00FC3422 /* 8a0b5544gy1gauy2gmkg9j20u00gegnp.jpg */, 353 | 0094F27323CD0DC200FC3422 /* 8a0b5544gy1gauy2flua6j20u00hitab.jpg */, 354 | 0094F26F23CD0D8E00FC3422 /* 8a0b5544gy1gauy2gz000j20u00n6wgj.jpg */, 355 | 0094F27123CD0DA500FC3422 /* 8a0b5544gy1gauy2hcozsj20u01czdiy.jpg */, 356 | 0094F26723CD0CF700FC3422 /* 8a0b5544jw1e8qgp5bmzyj2050050aa8.jpg */, 357 | 0094F27723CD0FAA00FC3422 /* 700a34f6gy1gaunsx2jywj20j60pkaeu.jpg */, 358 | 0094F27923CD0FC000FC3422 /* 700a34f6gy1gaunswxtlrj20j60pkgok.jpg */, 359 | 0094F27B23CD0FD300FC3422 /* 700a34f6gy1gaunswy5qnj20j60pkadk.jpg */, 360 | 0094F27D23CD0FE100FC3422 /* 700a34f6gy1gaunswwui7j20j60pl78e.jpg */, 361 | 0094F27F23CD0FF800FC3422 /* 700a34f6gy1gaunsxgzixj20j60edmz8.jpg */, 362 | 0094F28123CD100D00FC3422 /* 700a34f6gy1gaunsxhp4pj20j60pkn1k.jpg */, 363 | 0094F27523CD0F4500FC3422 /* 700a34f6ly8g9a29rjt92j20fn0iqdg8.jpg */, 364 | 0094F28523CD10AD00FC3422 /* 006gWxMEly1gavap86qr9j30ht0qo40t.jpg */, 365 | 0094F28723CD10BD00FC3422 /* 006gWxMEly1gavap8dywoj30hs0bwq48.jpg */, 366 | 0094F28923CD10D900FC3422 /* 006gWxMEly1gavap8vsqaj30hs0bwgm6.jpg */, 367 | 0094F28B23CD10EB00FC3422 /* 006gWxMEly1gavap88gttj30hs0a0dgf.jpg */, 368 | 0094F28323CD107000FC3422 /* 006gWxMEly8g0bjpl3ynij30kv0kv773.jpg */, 369 | 0094F28D23CD124300FC3422 /* 8697cf1ely8gashxj3b09j20u00u040v.jpg */, 370 | ); 371 | path = Resources; 372 | sourceTree = ""; 373 | }; 374 | /* End PBXGroup section */ 375 | 376 | /* Begin PBXNativeTarget section */ 377 | 002274F823C3BB3600014786 /* PostDemo */ = { 378 | isa = PBXNativeTarget; 379 | buildConfigurationList = 0022750D23C3BB3800014786 /* Build configuration list for PBXNativeTarget "PostDemo" */; 380 | buildPhases = ( 381 | 002274F523C3BB3600014786 /* Sources */, 382 | 002274F623C3BB3600014786 /* Frameworks */, 383 | 002274F723C3BB3600014786 /* Resources */, 384 | ); 385 | buildRules = ( 386 | ); 387 | dependencies = ( 388 | ); 389 | name = PostDemo; 390 | productName = PostDemo; 391 | productReference = 002274F923C3BB3600014786 /* PostDemo.app */; 392 | productType = "com.apple.product-type.application"; 393 | }; 394 | /* End PBXNativeTarget section */ 395 | 396 | /* Begin PBXProject section */ 397 | 002274F123C3BB3600014786 /* Project object */ = { 398 | isa = PBXProject; 399 | attributes = { 400 | LastSwiftUpdateCheck = 1120; 401 | LastUpgradeCheck = 1120; 402 | ORGANIZATIONNAME = xiaoyouxinqing; 403 | TargetAttributes = { 404 | 002274F823C3BB3600014786 = { 405 | CreatedOnToolsVersion = 11.2.1; 406 | }; 407 | }; 408 | }; 409 | buildConfigurationList = 002274F423C3BB3600014786 /* Build configuration list for PBXProject "PostDemo" */; 410 | compatibilityVersion = "Xcode 9.3"; 411 | developmentRegion = en; 412 | hasScannedForEncodings = 0; 413 | knownRegions = ( 414 | en, 415 | Base, 416 | ); 417 | mainGroup = 002274F023C3BB3600014786; 418 | productRefGroup = 002274FA23C3BB3600014786 /* Products */; 419 | projectDirPath = ""; 420 | projectRoot = ""; 421 | targets = ( 422 | 002274F823C3BB3600014786 /* PostDemo */, 423 | ); 424 | }; 425 | /* End PBXProject section */ 426 | 427 | /* Begin PBXResourcesBuildPhase section */ 428 | 002274F723C3BB3600014786 /* Resources */ = { 429 | isa = PBXResourcesBuildPhase; 430 | buildActionMask = 2147483647; 431 | files = ( 432 | 0094F25A23CD0B8500FC3422 /* 630584a6gy1gau54zyj61j20m80etn07.jpg in Resources */, 433 | 0068EBF523CECF7B005A8023 /* bca7fdafgw1ekhkps65b1j2050050dg4.jpg in Resources */, 434 | 0094F24623CD062200FC3422 /* 006PdkDogy1gap6ngj12ej30u011itf7.jpg in Resources */, 435 | 0068EC0723CED187005A8023 /* c5aa834fgy1gauzr86bp5j20pb0w47in.jpg in Resources */, 436 | 0094F23623CD033C00FC3422 /* d0c21786ly1gavj2btv6tj20c80790tg.jpg in Resources */, 437 | 0068EBF923CED001005A8023 /* bca7fdafly1gax1gqdnboj20c80atmxp.jpg in Resources */, 438 | 0094F24423CD059D00FC3422 /* 006PdkDoly8ffywe2fq39j304g04gwed.jpg in Resources */, 439 | 0068EBEB23CECDB1005A8023 /* eb5c94aegy1gav2509cp5j20zk0k0n2j.jpg in Resources */, 440 | 0068EBFF23CED034005A8023 /* bca7fdafly1gax1gqd9vmj20c80ayaam.jpg in Resources */, 441 | 0022751B23C3C15900014786 /* 4e7f0c83gy1gam2mn58d3j22tc240qv5.jpg in Resources */, 442 | 0094F25023CD0A9A00FC3422 /* 6ec3b446gy1gavd523embj20j60pytd6.jpg in Resources */, 443 | 0094F24823CD063500FC3422 /* 006PdkDogy1gap6ngiyn3j30u011idle.jpg in Resources */, 444 | 0022751823C3C15900014786 /* 4e7f0c83gy1gam2ml6nucj22tc240kjl.jpg in Resources */, 445 | 0068EBFD23CED020005A8023 /* bca7fdafly1gax1gqfgsjj20c80axaay.jpg in Resources */, 446 | 0094F25823CD0B5F00FC3422 /* 630584a6gy1gau54zl806j20m80etmzo.jpg in Resources */, 447 | 0068EC0B23CED1AB005A8023 /* c5aa834fgy1gauzr95r6fj20tw0l3dq4.jpg in Resources */, 448 | 0094F24023CD04DA00FC3422 /* 6a2afec3jw8fb4ld0qf2gj20e80dsdfz.jpg in Resources */, 449 | 0068EC0123CED042005A8023 /* bca7fdafly1gax1gqdhouj20c80axaam.jpg in Resources */, 450 | 0094F25C23CD0BE000FC3422 /* 9dc7402fjw1e8qgp5bmzyj2050050aa8.jpg in Resources */, 451 | 0094F27823CD0FAA00FC3422 /* 700a34f6gy1gaunsx2jywj20j60pkaeu.jpg in Resources */, 452 | 0068EBE723CECD48005A8023 /* eb5c94aely8fmvumnl9baj20v90v9q49.jpg in Resources */, 453 | 0022750923C3BB3800014786 /* LaunchScreen.storyboard in Resources */, 454 | 0094F25E23CD0C2A00FC3422 /* 9dc7402fgy1gavd367p0pj20j60nywic.jpg in Resources */, 455 | 0094F27623CD0F4500FC3422 /* 700a34f6ly8g9a29rjt92j20fn0iqdg8.jpg in Resources */, 456 | 0094F28C23CD10EB00FC3422 /* 006gWxMEly1gavap88gttj30hs0a0dgf.jpg in Resources */, 457 | 0094F28823CD10BD00FC3422 /* 006gWxMEly1gavap8dywoj30hs0bwq48.jpg in Resources */, 458 | 0068EC0523CED176005A8023 /* c5aa834fgy1gauzr6venkj20u01hc12f.jpg in Resources */, 459 | 0094F26223CD0C4700FC3422 /* 9dc7402fgy1gavd38wwlrj20j60nyq6y.jpg in Resources */, 460 | 0094F29623CD890D00FC3422 /* PostListData_recommend_1.json in Resources */, 461 | 0068EBF323CECE21005A8023 /* eb5c94aegy1gav25n5ibjj20zk1h8wuu.jpg in Resources */, 462 | 0094F26823CD0CF700FC3422 /* 8a0b5544jw1e8qgp5bmzyj2050050aa8.jpg in Resources */, 463 | 0094F25423CD0B2800FC3422 /* 630584a6gy1gau54zm4dtj20m80dftbv.jpg in Resources */, 464 | 0094F27223CD0DA600FC3422 /* 8a0b5544gy1gauy2hcozsj20u01czdiy.jpg in Resources */, 465 | 0094F27E23CD0FE100FC3422 /* 700a34f6gy1gaunswwui7j20j60pl78e.jpg in Resources */, 466 | 0094F22A23CCFF1400FC3422 /* 005tnxzUly8gab4i2r73xj30u00u0js8.jpg in Resources */, 467 | 0094F28E23CD124300FC3422 /* 8697cf1ely8gashxj3b09j20u00u040v.jpg in Resources */, 468 | 0068EBEF23CECDE0005A8023 /* eb5c94aegy1gav26fycwlj20zk1h8drh.jpg in Resources */, 469 | 0094F24E23CD0A8500FC3422 /* 6ec3b446gy1gavd51jc4lj20j60pmwhl.jpg in Resources */, 470 | 0094F26E23CD0D7A00FC3422 /* 8a0b5544gy1gauy2gmkg9j20u00gegnp.jpg in Resources */, 471 | 0068EC0923CED19C005A8023 /* c5aa834fgy1gauzr8ok78j20tz12fk8w.jpg in Resources */, 472 | 0068EBF123CECDFD005A8023 /* eb5c94aegy1gav25ox6dvj20u00k1go9.jpg in Resources */, 473 | 0094F23E23CD03C000FC3422 /* d0c21786ly1gavj2d17d9j20c808zq3r.jpg in Resources */, 474 | 0094F28223CD100D00FC3422 /* 700a34f6gy1gaunsxhp4pj20j60pkn1k.jpg in Resources */, 475 | 0022751E23C3C15900014786 /* 4e7f0c83gy1gam2misv31j21hc0u016k.jpg in Resources */, 476 | 0094F27A23CD0FC000FC3422 /* 700a34f6gy1gaunswxtlrj20j60pkgok.jpg in Resources */, 477 | 0094F28423CD107000FC3422 /* 006gWxMEly8g0bjpl3ynij30kv0kv773.jpg in Resources */, 478 | 0094F23C23CD03A600FC3422 /* d0c21786ly1gavj2cowp9j20c8083ab4.jpg in Resources */, 479 | 0094F27023CD0D8E00FC3422 /* 8a0b5544gy1gauy2gz000j20u00n6wgj.jpg in Resources */, 480 | 0068EC0D23CED1B9005A8023 /* c5aa834fgy1gauzrb7s5ej20tz13qh5x.jpg in Resources */, 481 | 0094F22823CCFD9300FC3422 /* 76297935ly1gatz8obqvkj22c0340npe.jpg in Resources */, 482 | 0094F27423CD0DC200FC3422 /* 8a0b5544gy1gauy2flua6j20u00hitab.jpg in Resources */, 483 | 0022750623C3BB3800014786 /* Preview Assets.xcassets in Resources */, 484 | 0068EBFB23CED011005A8023 /* bca7fdafly1gax1gqehdaj20c80atq3x.jpg in Resources */, 485 | 0094F23A23CD039200FC3422 /* d0c21786ly1gavj2cdrkyj20c80720tg.jpg in Resources */, 486 | 0022751C23C3C15900014786 /* 4e7f0c83gy1gam2mr1b81j22tc2407wi.jpg in Resources */, 487 | 0068EC0323CED0B4005A8023 /* c5aa834fly8g97m8ix9lcj20re0regnk.jpg in Resources */, 488 | 0094F24223CD053900FC3422 /* 6a2afec3gy1gaulykcejqj20t5145wns.jpg in Resources */, 489 | 0094F23023CD01C200FC3422 /* 7f9147a5ly1fzxlh4ovuej20e90fl4fo.jpg in Resources */, 490 | 0094F22E23CD017C00FC3422 /* 7f9147a5ly1fzxlgxgzpij20e90fltsj.jpg in Resources */, 491 | 0022750323C3BB3800014786 /* Assets.xcassets in Resources */, 492 | 0094F29523CD890D00FC3422 /* PostListData_hot_1.json in Resources */, 493 | 0094F26023CD0C3900FC3422 /* 9dc7402fgy1gavd38kqjtj20j60nyn1d.jpg in Resources */, 494 | 0094F23423CD02CC00FC3422 /* d0c21786ly8fsax1ftiifj20ro0ro43g.jpg in Resources */, 495 | 0068EBF723CECFEC005A8023 /* bca7fdafly1gax1gqdg6qj20c80avdgl.jpg in Resources */, 496 | 0094F23223CD01D800FC3422 /* 7f9147a5ly1fzxlh6hzdnj20e90fl7me.jpg in Resources */, 497 | 0094F26A23CD0D5900FC3422 /* 8a0b5544gy1gauy2g35yoj20u00fomzf.jpg in Resources */, 498 | 0094F25623CD0B3D00FC3422 /* 630584a6gy1gau54zgaxhj20m80et0vq.jpg in Resources */, 499 | 0094F26623CD0C6200FC3422 /* 9dc7402fgy1gavd37l9nwj20j60ny44q.jpg in Resources */, 500 | 0094F22023CCFCD300FC3422 /* 76297935ly8g4phfkq68hj20u00u0mzt.jpg in Resources */, 501 | 0022751923C3C15900014786 /* 4e7f0c83gy1gam2mjhk8zj21hc0v6wnx.jpg in Resources */, 502 | 0094F23823CD035000FC3422 /* d0c21786ly1gavj2c0kcej20c8096dh7.jpg in Resources */, 503 | 0022751D23C3C15900014786 /* 4e7f0c83gy1gam2mp0x4pj22tc240u0x.jpg in Resources */, 504 | 0094F22423CCFD7000FC3422 /* 76297935ly1gatz89dzblj23402c0qv6.jpg in Resources */, 505 | 0094F28A23CD10D900FC3422 /* 006gWxMEly1gavap8vsqaj30hs0bwgm6.jpg in Resources */, 506 | 0094F22623CCFD8000FC3422 /* 76297935ly1gatz8k5itij22c02c01ky.jpg in Resources */, 507 | 0094F28623CD10AD00FC3422 /* 006gWxMEly1gavap86qr9j30ht0qo40t.jpg in Resources */, 508 | 0094F24C23CD0A6A00FC3422 /* 6ec3b446gy1gavd4xud8lj20j60qkwj0.jpg in Resources */, 509 | 0094F27C23CD0FD300FC3422 /* 700a34f6gy1gaunswy5qnj20j60pkadk.jpg in Resources */, 510 | 0022751A23C3C15900014786 /* 4e7f0c83ly8g1ho507078j20ro0rojtq.jpg in Resources */, 511 | 0094F24A23CD09DC00FC3422 /* 6ec3b446jw1e8qgp5bmzyj2050050aa8.jpg in Resources */, 512 | 0094F26423CD0C5500FC3422 /* 9dc7402fgy1gavd39ba15j20j60nywii.jpg in Resources */, 513 | 0094F26C23CD0D6900FC3422 /* 8a0b5544gy1gauy2ex786j20u0129aed.jpg in Resources */, 514 | 0094F25223CD0AE900FC3422 /* 630584a6ly8fqs5wwkkmrj20ku0kuta7.jpg in Resources */, 515 | 0094F22223CCFD6000FC3422 /* 76297935ly1gatz8g5rvxj22c03401kz.jpg in Resources */, 516 | 0094F22C23CD00CB00FC3422 /* 648ed25bjw8est9nqrtnij20500503yr.jpg in Resources */, 517 | 0094F28023CD0FF800FC3422 /* 700a34f6gy1gaunsxgzixj20j60edmz8.jpg in Resources */, 518 | ); 519 | runOnlyForDeploymentPostprocessing = 0; 520 | }; 521 | /* End PBXResourcesBuildPhase section */ 522 | 523 | /* Begin PBXSourcesBuildPhase section */ 524 | 002274F523C3BB3600014786 /* Sources */ = { 525 | isa = PBXSourcesBuildPhase; 526 | buildActionMask = 2147483647; 527 | files = ( 528 | 0094F29023CD2E7800FC3422 /* PostDetailView.swift in Sources */, 529 | 002274FD23C3BB3600014786 /* AppDelegate.swift in Sources */, 530 | 0074241A23C51C3B00D13AAC /* PostImageCell.swift in Sources */, 531 | 0041E47523C90BD3006EDCD6 /* HScrollViewController.swift in Sources */, 532 | 0080E05B23C66FBA006CED73 /* HomeView.swift in Sources */, 533 | 00D7B8C323D2382C004918E8 /* PostVIPBadge.swift in Sources */, 534 | 0094F29223CD40CE00FC3422 /* UserData.swift in Sources */, 535 | 0080E05923C666CC006CED73 /* HomeNavigationBar.swift in Sources */, 536 | 0068EBE523CE950D005A8023 /* CommentInputView.swift in Sources */, 537 | 002274FF23C3BB3600014786 /* SceneDelegate.swift in Sources */, 538 | 005DCA6123C5639D00845B12 /* PostCellToolbarButton.swift in Sources */, 539 | 0068EBE123CE8DF7005A8023 /* KeyboardResponder.swift in Sources */, 540 | 0068EB9923CE4430005A8023 /* CommentTextView.swift in Sources */, 541 | 0022750123C3BB3600014786 /* PostListView.swift in Sources */, 542 | 0022752023C3C36A00014786 /* PostCell.swift in Sources */, 543 | 0022752223C3C3AB00014786 /* Post.swift in Sources */, 544 | ); 545 | runOnlyForDeploymentPostprocessing = 0; 546 | }; 547 | /* End PBXSourcesBuildPhase section */ 548 | 549 | /* Begin PBXVariantGroup section */ 550 | 0022750723C3BB3800014786 /* LaunchScreen.storyboard */ = { 551 | isa = PBXVariantGroup; 552 | children = ( 553 | 0022750823C3BB3800014786 /* Base */, 554 | ); 555 | name = LaunchScreen.storyboard; 556 | sourceTree = ""; 557 | }; 558 | /* End PBXVariantGroup section */ 559 | 560 | /* Begin XCBuildConfiguration section */ 561 | 0022750B23C3BB3800014786 /* Debug */ = { 562 | isa = XCBuildConfiguration; 563 | buildSettings = { 564 | ALWAYS_SEARCH_USER_PATHS = NO; 565 | CLANG_ANALYZER_NONNULL = YES; 566 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; 567 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; 568 | CLANG_CXX_LIBRARY = "libc++"; 569 | CLANG_ENABLE_MODULES = YES; 570 | CLANG_ENABLE_OBJC_ARC = YES; 571 | CLANG_ENABLE_OBJC_WEAK = YES; 572 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 573 | CLANG_WARN_BOOL_CONVERSION = YES; 574 | CLANG_WARN_COMMA = YES; 575 | CLANG_WARN_CONSTANT_CONVERSION = YES; 576 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 577 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 578 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 579 | CLANG_WARN_EMPTY_BODY = YES; 580 | CLANG_WARN_ENUM_CONVERSION = YES; 581 | CLANG_WARN_INFINITE_RECURSION = YES; 582 | CLANG_WARN_INT_CONVERSION = YES; 583 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 584 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 585 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 586 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 587 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 588 | CLANG_WARN_STRICT_PROTOTYPES = YES; 589 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 590 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; 591 | CLANG_WARN_UNREACHABLE_CODE = YES; 592 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 593 | COPY_PHASE_STRIP = NO; 594 | DEBUG_INFORMATION_FORMAT = dwarf; 595 | ENABLE_STRICT_OBJC_MSGSEND = YES; 596 | ENABLE_TESTABILITY = YES; 597 | GCC_C_LANGUAGE_STANDARD = gnu11; 598 | GCC_DYNAMIC_NO_PIC = NO; 599 | GCC_NO_COMMON_BLOCKS = YES; 600 | GCC_OPTIMIZATION_LEVEL = 0; 601 | GCC_PREPROCESSOR_DEFINITIONS = ( 602 | "DEBUG=1", 603 | "$(inherited)", 604 | ); 605 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 606 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 607 | GCC_WARN_UNDECLARED_SELECTOR = YES; 608 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 609 | GCC_WARN_UNUSED_FUNCTION = YES; 610 | GCC_WARN_UNUSED_VARIABLE = YES; 611 | IPHONEOS_DEPLOYMENT_TARGET = 13.2; 612 | MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; 613 | MTL_FAST_MATH = YES; 614 | ONLY_ACTIVE_ARCH = YES; 615 | SDKROOT = iphoneos; 616 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; 617 | SWIFT_OPTIMIZATION_LEVEL = "-Onone"; 618 | }; 619 | name = Debug; 620 | }; 621 | 0022750C23C3BB3800014786 /* Release */ = { 622 | isa = XCBuildConfiguration; 623 | buildSettings = { 624 | ALWAYS_SEARCH_USER_PATHS = NO; 625 | CLANG_ANALYZER_NONNULL = YES; 626 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; 627 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; 628 | CLANG_CXX_LIBRARY = "libc++"; 629 | CLANG_ENABLE_MODULES = YES; 630 | CLANG_ENABLE_OBJC_ARC = YES; 631 | CLANG_ENABLE_OBJC_WEAK = YES; 632 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 633 | CLANG_WARN_BOOL_CONVERSION = YES; 634 | CLANG_WARN_COMMA = YES; 635 | CLANG_WARN_CONSTANT_CONVERSION = YES; 636 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 637 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 638 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 639 | CLANG_WARN_EMPTY_BODY = YES; 640 | CLANG_WARN_ENUM_CONVERSION = YES; 641 | CLANG_WARN_INFINITE_RECURSION = YES; 642 | CLANG_WARN_INT_CONVERSION = YES; 643 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 644 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 645 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 646 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 647 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 648 | CLANG_WARN_STRICT_PROTOTYPES = YES; 649 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 650 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; 651 | CLANG_WARN_UNREACHABLE_CODE = YES; 652 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 653 | COPY_PHASE_STRIP = NO; 654 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 655 | ENABLE_NS_ASSERTIONS = NO; 656 | ENABLE_STRICT_OBJC_MSGSEND = YES; 657 | GCC_C_LANGUAGE_STANDARD = gnu11; 658 | GCC_NO_COMMON_BLOCKS = YES; 659 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 660 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 661 | GCC_WARN_UNDECLARED_SELECTOR = YES; 662 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 663 | GCC_WARN_UNUSED_FUNCTION = YES; 664 | GCC_WARN_UNUSED_VARIABLE = YES; 665 | IPHONEOS_DEPLOYMENT_TARGET = 13.2; 666 | MTL_ENABLE_DEBUG_INFO = NO; 667 | MTL_FAST_MATH = YES; 668 | SDKROOT = iphoneos; 669 | SWIFT_COMPILATION_MODE = wholemodule; 670 | SWIFT_OPTIMIZATION_LEVEL = "-O"; 671 | VALIDATE_PRODUCT = YES; 672 | }; 673 | name = Release; 674 | }; 675 | 0022750E23C3BB3800014786 /* Debug */ = { 676 | isa = XCBuildConfiguration; 677 | buildSettings = { 678 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 679 | CODE_SIGN_STYLE = Automatic; 680 | DEVELOPMENT_ASSET_PATHS = "\"PostDemo/Preview Content\""; 681 | DEVELOPMENT_TEAM = 7NB3P68669; 682 | ENABLE_PREVIEWS = YES; 683 | INFOPLIST_FILE = PostDemo/Info.plist; 684 | LD_RUNPATH_SEARCH_PATHS = ( 685 | "$(inherited)", 686 | "@executable_path/Frameworks", 687 | ); 688 | PRODUCT_BUNDLE_IDENTIFIER = com.xiaoyouxinqing.PostDemo; 689 | PRODUCT_NAME = "$(TARGET_NAME)"; 690 | SWIFT_VERSION = 5.0; 691 | TARGETED_DEVICE_FAMILY = "1,2"; 692 | }; 693 | name = Debug; 694 | }; 695 | 0022750F23C3BB3800014786 /* Release */ = { 696 | isa = XCBuildConfiguration; 697 | buildSettings = { 698 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 699 | CODE_SIGN_STYLE = Automatic; 700 | DEVELOPMENT_ASSET_PATHS = "\"PostDemo/Preview Content\""; 701 | DEVELOPMENT_TEAM = 7NB3P68669; 702 | ENABLE_PREVIEWS = YES; 703 | INFOPLIST_FILE = PostDemo/Info.plist; 704 | LD_RUNPATH_SEARCH_PATHS = ( 705 | "$(inherited)", 706 | "@executable_path/Frameworks", 707 | ); 708 | PRODUCT_BUNDLE_IDENTIFIER = com.xiaoyouxinqing.PostDemo; 709 | PRODUCT_NAME = "$(TARGET_NAME)"; 710 | SWIFT_VERSION = 5.0; 711 | TARGETED_DEVICE_FAMILY = "1,2"; 712 | }; 713 | name = Release; 714 | }; 715 | /* End XCBuildConfiguration section */ 716 | 717 | /* Begin XCConfigurationList section */ 718 | 002274F423C3BB3600014786 /* Build configuration list for PBXProject "PostDemo" */ = { 719 | isa = XCConfigurationList; 720 | buildConfigurations = ( 721 | 0022750B23C3BB3800014786 /* Debug */, 722 | 0022750C23C3BB3800014786 /* Release */, 723 | ); 724 | defaultConfigurationIsVisible = 0; 725 | defaultConfigurationName = Release; 726 | }; 727 | 0022750D23C3BB3800014786 /* Build configuration list for PBXNativeTarget "PostDemo" */ = { 728 | isa = XCConfigurationList; 729 | buildConfigurations = ( 730 | 0022750E23C3BB3800014786 /* Debug */, 731 | 0022750F23C3BB3800014786 /* Release */, 732 | ); 733 | defaultConfigurationIsVisible = 0; 734 | defaultConfigurationName = Release; 735 | }; 736 | /* End XCConfigurationList section */ 737 | }; 738 | rootObject = 002274F123C3BB3600014786 /* Project object */; 739 | } 740 | -------------------------------------------------------------------------------- /PostDemo.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /PostDemo.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /PostDemo.xcodeproj/xcshareddata/xcschemes/PostDemo.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 32 | 33 | 43 | 45 | 51 | 52 | 53 | 54 | 60 | 62 | 68 | 69 | 70 | 71 | 73 | 74 | 77 | 78 | 79 | -------------------------------------------------------------------------------- /PostDemo/AppDelegate.swift: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate.swift 3 | // PostDemo 4 | // 5 | // Created by xiaoyouxinqing on 1/6/20. 6 | // Copyright © 2020 xiaoyouxinqing. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | @UIApplicationMain 12 | class AppDelegate: UIResponder, UIApplicationDelegate { 13 | 14 | 15 | 16 | func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { 17 | // Override point for customization after application launch. 18 | return true 19 | } 20 | 21 | // MARK: UISceneSession Lifecycle 22 | 23 | func application(_ application: UIApplication, configurationForConnecting connectingSceneSession: UISceneSession, options: UIScene.ConnectionOptions) -> UISceneConfiguration { 24 | // Called when a new scene session is being created. 25 | // Use this method to select a configuration to create the new scene with. 26 | return UISceneConfiguration(name: "Default Configuration", sessionRole: connectingSceneSession.role) 27 | } 28 | 29 | func application(_ application: UIApplication, didDiscardSceneSessions sceneSessions: Set) { 30 | // Called when the user discards a scene session. 31 | // If any sessions were discarded while the application was not running, this will be called shortly after application:didFinishLaunchingWithOptions. 32 | // Use this method to release any resources that were specific to the discarded scenes, as they will not return. 33 | } 34 | 35 | 36 | } 37 | 38 | -------------------------------------------------------------------------------- /PostDemo/Assets.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "iphone", 5 | "size" : "20x20", 6 | "scale" : "2x" 7 | }, 8 | { 9 | "idiom" : "iphone", 10 | "size" : "20x20", 11 | "scale" : "3x" 12 | }, 13 | { 14 | "idiom" : "iphone", 15 | "size" : "29x29", 16 | "scale" : "2x" 17 | }, 18 | { 19 | "idiom" : "iphone", 20 | "size" : "29x29", 21 | "scale" : "3x" 22 | }, 23 | { 24 | "idiom" : "iphone", 25 | "size" : "40x40", 26 | "scale" : "2x" 27 | }, 28 | { 29 | "idiom" : "iphone", 30 | "size" : "40x40", 31 | "scale" : "3x" 32 | }, 33 | { 34 | "idiom" : "iphone", 35 | "size" : "60x60", 36 | "scale" : "2x" 37 | }, 38 | { 39 | "idiom" : "iphone", 40 | "size" : "60x60", 41 | "scale" : "3x" 42 | }, 43 | { 44 | "idiom" : "ipad", 45 | "size" : "20x20", 46 | "scale" : "1x" 47 | }, 48 | { 49 | "idiom" : "ipad", 50 | "size" : "20x20", 51 | "scale" : "2x" 52 | }, 53 | { 54 | "idiom" : "ipad", 55 | "size" : "29x29", 56 | "scale" : "1x" 57 | }, 58 | { 59 | "idiom" : "ipad", 60 | "size" : "29x29", 61 | "scale" : "2x" 62 | }, 63 | { 64 | "idiom" : "ipad", 65 | "size" : "40x40", 66 | "scale" : "1x" 67 | }, 68 | { 69 | "idiom" : "ipad", 70 | "size" : "40x40", 71 | "scale" : "2x" 72 | }, 73 | { 74 | "idiom" : "ipad", 75 | "size" : "76x76", 76 | "scale" : "1x" 77 | }, 78 | { 79 | "idiom" : "ipad", 80 | "size" : "76x76", 81 | "scale" : "2x" 82 | }, 83 | { 84 | "idiom" : "ipad", 85 | "size" : "83.5x83.5", 86 | "scale" : "2x" 87 | }, 88 | { 89 | "idiom" : "ios-marketing", 90 | "size" : "1024x1024", 91 | "scale" : "1x" 92 | } 93 | ], 94 | "info" : { 95 | "version" : 1, 96 | "author" : "xcode" 97 | } 98 | } -------------------------------------------------------------------------------- /PostDemo/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /PostDemo/Base.lproj/LaunchScreen.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /PostDemo/CommentInputView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // CommentInputView.swift 3 | // PostDemo 4 | // 5 | // Created by xiaoyouxinqing on 1/14/20. 6 | // Copyright © 2020 xiaoyouxinqing. All rights reserved. 7 | // 8 | 9 | import SwiftUI 10 | 11 | struct CommentInputView: View { 12 | let post: Post 13 | 14 | @State private var text: String = "" 15 | @State private var showEmptyTextHUD: Bool = false 16 | 17 | @Environment(\.presentationMode) var presentationMode 18 | 19 | @EnvironmentObject var userData: UserData 20 | 21 | @ObservedObject private var keyboardResponder = KeyboardResponder() 22 | 23 | var body: some View { 24 | VStack(spacing: 0) { 25 | CommentTextView(text: $text, beginEditingOnAppear: true) 26 | 27 | HStack(spacing: 0) { 28 | Button(action: { 29 | self.presentationMode.wrappedValue.dismiss() 30 | }) { 31 | Text("取消") 32 | .padding() 33 | } 34 | 35 | Spacer() 36 | 37 | Button(action: { 38 | if self.text.trimmingCharacters(in: .whitespacesAndNewlines).isEmpty { 39 | self.showEmptyTextHUD = true 40 | 41 | DispatchQueue.main.asyncAfter(deadline: .now() + 1.5) { 42 | self.showEmptyTextHUD = false 43 | } 44 | return 45 | } 46 | print(self.text) 47 | var post = self.post 48 | post.commentCount += 1 49 | self.userData.update(post) 50 | self.presentationMode.wrappedValue.dismiss() 51 | }) { 52 | Text("发送") 53 | .padding() 54 | } 55 | } 56 | .font(.system(size: 18)) 57 | .foregroundColor(.black) 58 | } 59 | .overlay( 60 | Text("评论不能为空") 61 | .scaleEffect(showEmptyTextHUD ? 1 : 0.5) 62 | .animation(.spring(dampingFraction: 0.5)) 63 | .opacity(showEmptyTextHUD ? 1 : 0) 64 | .animation(.easeInOut) 65 | ) 66 | .padding(.bottom, keyboardResponder.keyboardHeight) 67 | .edgesIgnoringSafeArea(keyboardResponder.keyboardShow ? .bottom : []) 68 | } 69 | } 70 | 71 | struct CommentInputView_Previews: PreviewProvider { 72 | static var previews: some View { 73 | CommentInputView(post: UserData().recommendPostList.list[0]) 74 | } 75 | } 76 | -------------------------------------------------------------------------------- /PostDemo/CommentTextView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // CommentTextView.swift 3 | // PostDemo 4 | // 5 | // Created by xiaoyouxinqing on 1/14/20. 6 | // Copyright © 2020 xiaoyouxinqing. All rights reserved. 7 | // 8 | 9 | import SwiftUI 10 | 11 | struct CommentTextView: UIViewRepresentable { 12 | @Binding var text: String 13 | let beginEditingOnAppear: Bool 14 | 15 | func makeCoordinator() -> CommentTextView.Coordinator { 16 | Coordinator(self) 17 | } 18 | 19 | func makeUIView(context: Context) -> UITextView { 20 | let view = UITextView() 21 | view.backgroundColor = .systemGray6 22 | view.font = .systemFont(ofSize: 18) 23 | view.textContainerInset = UIEdgeInsets(top: 15, left: 15, bottom: 15, right: 15) 24 | view.delegate = context.coordinator 25 | view.text = text 26 | return view 27 | } 28 | 29 | func updateUIView(_ uiView: UITextView, context: Context) { 30 | if beginEditingOnAppear, 31 | !context.coordinator.didBecomeFirstResponder, 32 | uiView.window != nil, 33 | !uiView.isFirstResponder { 34 | uiView.becomeFirstResponder() 35 | context.coordinator.didBecomeFirstResponder = true 36 | } 37 | } 38 | 39 | class Coordinator: NSObject, UITextViewDelegate { 40 | let parent: CommentTextView 41 | var didBecomeFirstResponder: Bool = false 42 | 43 | init(_ view: CommentTextView) { parent = view } 44 | 45 | func textViewDidChange(_ textView: UITextView) { 46 | parent.text = textView.text 47 | } 48 | } 49 | } 50 | 51 | struct CommentTextView_Previews: PreviewProvider { 52 | static var previews: some View { 53 | CommentTextView(text: .constant("Text"), beginEditingOnAppear: false) 54 | } 55 | } 56 | -------------------------------------------------------------------------------- /PostDemo/HScrollViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // HScrollViewController.swift 3 | // PostDemo 4 | // 5 | // Created by xiaoyouxinqing on 1/10/20. 6 | // Copyright © 2020 xiaoyouxinqing. All rights reserved. 7 | // 8 | 9 | import SwiftUI 10 | 11 | struct HScrollViewController: UIViewControllerRepresentable { 12 | let pageWidth: CGFloat 13 | let contentSize: CGSize 14 | let content: Content 15 | @Binding var leftPercent: CGFloat 16 | 17 | init(pageWidth: CGFloat, 18 | contentSize: CGSize, 19 | leftPercent: Binding, 20 | @ViewBuilder content: () -> Content) { 21 | 22 | self.pageWidth = pageWidth 23 | self.contentSize = contentSize 24 | self.content = content() 25 | self._leftPercent = leftPercent 26 | } 27 | 28 | func makeCoordinator() -> Coordinator { 29 | Coordinator(self) 30 | } 31 | 32 | func makeUIViewController(context: Context) -> UIViewController { 33 | let scrollView = UIScrollView() 34 | scrollView.bounces = false 35 | scrollView.isPagingEnabled = true 36 | scrollView.showsVerticalScrollIndicator = false 37 | scrollView.showsHorizontalScrollIndicator = false 38 | scrollView.delegate = context.coordinator 39 | context.coordinator.scrollView = scrollView 40 | 41 | let vc = UIViewController() 42 | vc.view.addSubview(scrollView) 43 | 44 | let host = UIHostingController(rootView: content) 45 | vc.addChild(host) 46 | scrollView.addSubview(host.view) 47 | host.didMove(toParent: vc) 48 | context.coordinator.host = host 49 | 50 | return vc 51 | } 52 | 53 | func updateUIViewController(_ uiViewController: UIViewController, context: Context) { 54 | let scrollView = context.coordinator.scrollView! 55 | scrollView.frame = CGRect(x: 0, y: 0, width: pageWidth, height: contentSize.height) 56 | scrollView.contentSize = contentSize 57 | scrollView.setContentOffset(CGPoint(x: leftPercent * (contentSize.width - pageWidth), y: 0), animated: true) 58 | context.coordinator.host.view.frame = CGRect(origin: .zero, size: contentSize) 59 | } 60 | 61 | class Coordinator: NSObject, UIScrollViewDelegate { 62 | let parent: HScrollViewController 63 | var scrollView: UIScrollView! 64 | var host: UIHostingController! 65 | 66 | init(_ parent: HScrollViewController) { 67 | self.parent = parent 68 | } 69 | 70 | func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) { 71 | withAnimation { 72 | parent.leftPercent = scrollView.contentOffset.x < parent.pageWidth * 0.5 ? 0 : 1 73 | } 74 | } 75 | } 76 | } 77 | 78 | //struct HScrollViewController_Previews: PreviewProvider { 79 | // static var previews: some View { 80 | // HScrollViewController(pageWidth: UIScreen.main.bounds.width, 81 | // contentSize: CGSize(width: UIScreen.main.bounds.width, height: UIScreen.main.bounds.height), 82 | // leftPercent: .constant(0)) 83 | // { 84 | // Text("ASD") 85 | // } 86 | // } 87 | //} 88 | -------------------------------------------------------------------------------- /PostDemo/HomeNavigationBar.swift: -------------------------------------------------------------------------------- 1 | // 2 | // HomeNavigationBar.swift 3 | // PostDemo 4 | // 5 | // Created by xiaoyouxinqing on 1/8/20. 6 | // Copyright © 2020 xiaoyouxinqing. All rights reserved. 7 | // 8 | 9 | import SwiftUI 10 | 11 | private let kLabelWidth: CGFloat = 60 12 | private let kButtonHeight: CGFloat = 24 13 | 14 | struct HomeNavigationBar: View { 15 | @Binding var leftPercent: CGFloat // 0 for left, 1 for right 16 | 17 | var body: some View { 18 | HStack(alignment: .top, spacing: 0) { 19 | Button(action: { 20 | print("Click camera button") 21 | }) { 22 | Image(systemName: "camera") 23 | .resizable() 24 | .scaledToFit() 25 | .frame(width: kButtonHeight, height: kButtonHeight) 26 | .padding(.horizontal, 15) 27 | .padding(.top, 5) 28 | .foregroundColor(.black) 29 | } 30 | 31 | Spacer() 32 | 33 | VStack(spacing: 3) { 34 | HStack(spacing: 0) { 35 | Text("推荐") 36 | .bold() 37 | .frame(width: kLabelWidth, height: kButtonHeight) 38 | .padding(.top, 5) 39 | .opacity(Double(1 - leftPercent * 0.5)) 40 | .onTapGesture { 41 | withAnimation { 42 | self.leftPercent = 0 43 | } 44 | } 45 | 46 | Spacer() 47 | 48 | Text("热门") 49 | .bold() 50 | .frame(width: kLabelWidth) 51 | .padding(.top, 5) 52 | .opacity(Double(0.5 + leftPercent * 0.5)) 53 | .onTapGesture { 54 | withAnimation { 55 | self.leftPercent = 1 56 | } 57 | } 58 | } 59 | .font(.system(size: 20)) 60 | 61 | GeometryReader { geometry in 62 | RoundedRectangle(cornerRadius: 2) 63 | .foregroundColor(.orange) 64 | .frame(width: 30, height: 4) 65 | .offset(x: geometry.size.width * (self.leftPercent - 0.5) + kLabelWidth * (0.5 - self.leftPercent)) 66 | } 67 | .frame(height: 6) 68 | } 69 | .frame(width: UIScreen.main.bounds.width * 0.5) 70 | 71 | Spacer() 72 | 73 | Button(action: { 74 | print("Click add button") 75 | }) { 76 | Image(systemName: "plus.circle.fill") 77 | .resizable() 78 | .scaledToFit() 79 | .frame(width: kButtonHeight, height: kButtonHeight) 80 | .padding(.horizontal, 15) 81 | .padding(.top, 5) 82 | .foregroundColor(.orange) 83 | } 84 | } 85 | .frame(width: UIScreen.main.bounds.width) 86 | } 87 | } 88 | 89 | struct HomeNavigationBar_Previews: PreviewProvider { 90 | static var previews: some View { 91 | HomeNavigationBar(leftPercent: .constant(0)) 92 | } 93 | } 94 | -------------------------------------------------------------------------------- /PostDemo/HomeView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // HomeView.swift 3 | // PostDemo 4 | // 5 | // Created by xiaoyouxinqing on 1/8/20. 6 | // Copyright © 2020 xiaoyouxinqing. All rights reserved. 7 | // 8 | 9 | import SwiftUI 10 | 11 | struct HomeView: View { 12 | @State private var leftPercent: CGFloat = 0 // 0 for left, 1 for right 13 | 14 | init() { 15 | UITableView.appearance().separatorStyle = .none 16 | UITableViewCell.appearance().selectionStyle = .none 17 | } 18 | 19 | var body: some View { 20 | NavigationView { 21 | GeometryReader { geometry in 22 | HScrollViewController(pageWidth: geometry.size.width, 23 | contentSize: CGSize(width: geometry.size.width * 2, height: geometry.size.height), 24 | leftPercent: self.$leftPercent) 25 | { 26 | HStack(spacing: 0) { 27 | PostListView(category: .recommend) 28 | .frame(width: geometry.size.width) 29 | 30 | PostListView(category: .hot) 31 | .frame(width: geometry.size.width) 32 | } 33 | } 34 | } 35 | .edgesIgnoringSafeArea(.bottom) 36 | .navigationBarItems(leading: HomeNavigationBar(leftPercent: $leftPercent)) 37 | .navigationBarTitle("首页", displayMode: .inline) 38 | } 39 | .navigationViewStyle(StackNavigationViewStyle()) 40 | } 41 | } 42 | 43 | struct HomeView_Previews: PreviewProvider { 44 | static var previews: some View { 45 | HomeView().environmentObject(UserData()) 46 | } 47 | } 48 | -------------------------------------------------------------------------------- /PostDemo/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | $(PRODUCT_BUNDLE_PACKAGE_TYPE) 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleVersion 20 | 1 21 | LSRequiresIPhoneOS 22 | 23 | UIApplicationSceneManifest 24 | 25 | UIApplicationSupportsMultipleScenes 26 | 27 | UISceneConfigurations 28 | 29 | UIWindowSceneSessionRoleApplication 30 | 31 | 32 | UISceneConfigurationName 33 | Default Configuration 34 | UISceneDelegateClassName 35 | $(PRODUCT_MODULE_NAME).SceneDelegate 36 | 37 | 38 | 39 | 40 | UILaunchStoryboardName 41 | LaunchScreen 42 | UIRequiredDeviceCapabilities 43 | 44 | armv7 45 | 46 | UISupportedInterfaceOrientations 47 | 48 | UIInterfaceOrientationPortrait 49 | 50 | UISupportedInterfaceOrientations~ipad 51 | 52 | UIInterfaceOrientationPortrait 53 | UIInterfaceOrientationPortraitUpsideDown 54 | 55 | 56 | 57 | -------------------------------------------------------------------------------- /PostDemo/KeyboardResponder.swift: -------------------------------------------------------------------------------- 1 | // 2 | // KeyboardResponder.swift 3 | // PostDemo 4 | // 5 | // Created by xiaoyouxinqing on 1/14/20. 6 | // Copyright © 2020 xiaoyouxinqing. All rights reserved. 7 | // 8 | 9 | import SwiftUI 10 | 11 | class KeyboardResponder: ObservableObject { 12 | @Published var keyboardHeight: CGFloat = 0 13 | 14 | var keyboardShow: Bool { keyboardHeight > 0 } 15 | 16 | init() { 17 | NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillShow(_:)), name: UIWindow.keyboardWillShowNotification, object: nil) 18 | NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillHide(_:)), name: UIWindow.keyboardWillHideNotification, object: nil) 19 | } 20 | 21 | deinit { NotificationCenter.default.removeObserver(self) } 22 | 23 | @objc private func keyboardWillShow(_ notification: Notification) { 24 | guard let frame = notification.userInfo?[UIWindow.keyboardFrameEndUserInfoKey] as? CGRect else { return } 25 | keyboardHeight = frame.height 26 | } 27 | 28 | @objc private func keyboardWillHide(_ notification: Notification) { 29 | keyboardHeight = 0 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /PostDemo/Post.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Post.swift 3 | // PostDemo 4 | // 5 | // Created by xiaoyouxinqing on 1/6/20. 6 | // Copyright © 2020 xiaoyouxinqing. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | import UIKit 11 | import SwiftUI 12 | 13 | struct PostList: Codable { 14 | var list: [Post] 15 | } 16 | 17 | struct Post: Codable, Identifiable { 18 | let id: Int 19 | let avatar: String // image name 20 | let vip: Bool 21 | let name: String 22 | let date: String // yyyy-MM-dd HH:mm:ss 23 | 24 | var isFollowed: Bool 25 | 26 | let text: String 27 | let images: [String] // image names 28 | 29 | var commentCount: Int 30 | var likeCount: Int 31 | var isLiked: Bool 32 | } 33 | 34 | extension Post { 35 | var avatarImage: Image { 36 | return loadImage(name: avatar) 37 | } 38 | 39 | var commentCountText: String { 40 | if commentCount <= 0 { return "评论" } 41 | if commentCount < 1000 { return "\(commentCount)" } 42 | return String(format: "%.1fK", Double(commentCount) / 1000) 43 | } 44 | 45 | var likeCountText: String { 46 | if likeCount <= 0 { return "点赞" } 47 | if likeCount < 1000 { return "\(likeCount)" } 48 | return String(format: "%.1fK", Double(likeCount) / 1000) 49 | } 50 | } 51 | 52 | func loadPostListData(_ fileName: String) -> PostList { 53 | guard let url = Bundle.main.url(forResource: fileName, withExtension: nil) else { 54 | fatalError("Can not find \(fileName) in main bundle") 55 | } 56 | guard let data = try? Data(contentsOf: url) else { 57 | fatalError("Can not load \(url)") 58 | } 59 | guard let list = try? JSONDecoder().decode(PostList.self, from: data) else { 60 | fatalError("Can not parse post list json data") 61 | } 62 | return list 63 | } 64 | 65 | func loadImage(name: String) -> Image { 66 | return Image(uiImage: UIImage(named: name)!) 67 | } 68 | -------------------------------------------------------------------------------- /PostDemo/PostCell.swift: -------------------------------------------------------------------------------- 1 | // 2 | // PostCell.swift 3 | // PostDemo 4 | // 5 | // Created by xiaoyouxinqing on 1/6/20. 6 | // Copyright © 2020 xiaoyouxinqing. All rights reserved. 7 | // 8 | 9 | import SwiftUI 10 | 11 | struct PostCell: View { 12 | let post: Post 13 | 14 | @State var presentComment: Bool = false 15 | 16 | var bindingPost: Post { 17 | userData.post(forId: post.id)! 18 | } 19 | 20 | @EnvironmentObject var userData: UserData 21 | 22 | var body: some View { 23 | var post = bindingPost 24 | return VStack(alignment: .leading, spacing: 10) { 25 | HStack(spacing: 5) { 26 | post.avatarImage 27 | .resizable() 28 | .scaledToFill() 29 | .frame(width: 50, height: 50) 30 | .clipShape(Circle()) 31 | .overlay( 32 | PostVIPBadge(vip: post.vip) 33 | .offset(x: 16, y: 16) 34 | ) 35 | 36 | VStack(alignment: .leading, spacing: 5) { 37 | Text(post.name) 38 | .font(.system(size: 16)) 39 | .foregroundColor(.init(red: 242 / 255, green: 99 / 255, blue: 4 / 255)) 40 | .lineLimit(1) 41 | Text(post.date) 42 | .font(.system(size: 11)) 43 | .foregroundColor(.gray) 44 | } 45 | .padding(.leading, 10) 46 | 47 | if !post.isFollowed { 48 | Spacer() 49 | 50 | Button(action: { 51 | post.isFollowed = true 52 | self.userData.update(post) 53 | }) { 54 | Text("关注") 55 | .font(.system(size: 14)) 56 | .foregroundColor(.orange) 57 | .frame(width: 50, height: 26) 58 | .overlay( 59 | RoundedRectangle(cornerRadius: 13) 60 | .stroke(Color.orange, lineWidth: 1) 61 | ) 62 | } 63 | .buttonStyle(BorderlessButtonStyle()) 64 | } 65 | } 66 | 67 | Text(post.text) 68 | .font(.system(size: 17)) 69 | 70 | if !post.images.isEmpty { 71 | PostImageCell(images: post.images, width: UIScreen.main.bounds.width - 30) 72 | } 73 | 74 | Divider() 75 | 76 | HStack(spacing: 0) { 77 | Spacer() 78 | 79 | PostCellToolbarButton(image: "message", 80 | text: post.commentCountText, 81 | color: .black) 82 | { 83 | self.presentComment = true 84 | } 85 | .sheet(isPresented: $presentComment) { 86 | CommentInputView(post: post) 87 | .environmentObject(self.userData) 88 | } 89 | 90 | Spacer() 91 | 92 | PostCellToolbarButton(image: post.isLiked ? "heart.fill" : "heart", 93 | text: post.likeCountText, 94 | color: post.isLiked ? .red : .black) 95 | { 96 | if post.isLiked { 97 | post.isLiked = false 98 | post.likeCount -= 1 99 | } else { 100 | post.isLiked = true 101 | post.likeCount += 1 102 | } 103 | self.userData.update(post) 104 | } 105 | 106 | Spacer() 107 | } 108 | 109 | Rectangle() 110 | .padding(.horizontal, -15) 111 | .frame(height: 10) 112 | .foregroundColor(.init(red: 238 / 255, green: 238 / 255, blue: 238 / 255)) 113 | } 114 | .padding(.horizontal, 15) 115 | .padding(.top, 15) 116 | } 117 | } 118 | 119 | struct PostCell_Previews: PreviewProvider { 120 | static var previews: some View { 121 | let userData = UserData() 122 | return PostCell(post: userData.recommendPostList.list[0]).environmentObject(userData) 123 | } 124 | } 125 | -------------------------------------------------------------------------------- /PostDemo/PostCellToolbarButton.swift: -------------------------------------------------------------------------------- 1 | // 2 | // PostCellToolbarButton.swift 3 | // PostDemo 4 | // 5 | // Created by xiaoyouxinqing on 1/7/20. 6 | // Copyright © 2020 xiaoyouxinqing. All rights reserved. 7 | // 8 | 9 | import SwiftUI 10 | 11 | struct PostCellToolbarButton: View { 12 | let image: String 13 | let text: String 14 | let color: Color 15 | let action: () -> Void 16 | 17 | var body: some View { 18 | Button(action: action) { 19 | HStack(spacing: 5) { 20 | Image(systemName: image) 21 | .resizable() 22 | .scaledToFit() 23 | .frame(width: 18, height: 18) 24 | Text(text) 25 | .font(.system(size: 15)) 26 | } 27 | } 28 | .foregroundColor(color) 29 | .buttonStyle(BorderlessButtonStyle()) 30 | } 31 | } 32 | 33 | struct PostCellToolbarButton_Previews: PreviewProvider { 34 | static var previews: some View { 35 | PostCellToolbarButton(image: "heart", text: "Text", color: .blue) { 36 | print("Click") 37 | } 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /PostDemo/PostDetailView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // PostDetailView.swift 3 | // PostDemo 4 | // 5 | // Created by xiaoyouxinqing on 1/13/20. 6 | // Copyright © 2020 xiaoyouxinqing. All rights reserved. 7 | // 8 | 9 | import SwiftUI 10 | 11 | struct PostDetailView: View { 12 | let post: Post 13 | 14 | var body: some View { 15 | List { 16 | PostCell(post: post) 17 | .listRowInsets(EdgeInsets()) 18 | 19 | ForEach(1...10, id: \.self) { i in 20 | Text("评论\(i)") 21 | } 22 | } 23 | .navigationBarTitle("详情", displayMode: .inline) 24 | } 25 | } 26 | 27 | struct PostDetailView_Previews: PreviewProvider { 28 | static var previews: some View { 29 | let userData = UserData() 30 | return PostDetailView(post: userData.recommendPostList.list[0]).environmentObject(userData) 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /PostDemo/PostImageCell.swift: -------------------------------------------------------------------------------- 1 | // 2 | // PostImageCell.swift 3 | // PostDemo 4 | // 5 | // Created by xiaoyouxinqing on 1/7/20. 6 | // Copyright © 2020 xiaoyouxinqing. All rights reserved. 7 | // 8 | 9 | import SwiftUI 10 | 11 | private let kImageSpace: CGFloat = 6 12 | 13 | // Do not use PreferenceKey to update the cell height. This leads to bad performance. 14 | struct PostImageCell: View { 15 | let images: [String] 16 | let width: CGFloat 17 | 18 | var body: some View { 19 | Group { 20 | if images.count == 1 { 21 | loadImage(name: self.images[0]) 22 | .resizable() 23 | .scaledToFill() 24 | .frame(width: width, height: width * 0.75) 25 | .clipped() 26 | } else if images.count == 2 { 27 | PostImageCellRow(images: images, width: width) 28 | } else if images.count == 3 { 29 | PostImageCellRow(images: images, width: width) 30 | } else if images.count == 4 { 31 | VStack(alignment: .center, spacing: kImageSpace) { 32 | PostImageCellRow(images: Array(images[0...1]), width: width) 33 | PostImageCellRow(images: Array(images[2...3]), width: width) 34 | } 35 | } else if images.count == 5 { 36 | VStack(alignment: .center, spacing: kImageSpace) { 37 | PostImageCellRow(images: Array(images[0...1]), width: width) 38 | PostImageCellRow(images: Array(images[2...4]), width: width) 39 | } 40 | } else if images.count == 6 { 41 | VStack(alignment: .center, spacing: kImageSpace) { 42 | PostImageCellRow(images: Array(images[0...2]), width: width) 43 | PostImageCellRow(images: Array(images[3...5]), width: width) 44 | } 45 | } 46 | } 47 | } 48 | } 49 | 50 | struct PostImageCellRow: View { 51 | let images: [String] 52 | let width: CGFloat 53 | 54 | var body: some View { 55 | HStack(alignment: .center, spacing: kImageSpace) { 56 | ForEach(images, id: \.self) { image in 57 | loadImage(name: image) 58 | .resizable() 59 | .scaledToFill() 60 | .frame(width: (self.width - kImageSpace * CGFloat(self.images.count - 1)) / CGFloat(self.images.count), 61 | height: (self.width - kImageSpace * CGFloat(self.images.count - 1)) / CGFloat(self.images.count)) 62 | .clipped() 63 | } 64 | } 65 | } 66 | } 67 | 68 | struct PostImageCell_Previews: PreviewProvider { 69 | static var previews: some View { 70 | let list = UserData().recommendPostList.list 71 | let width = UIScreen.main.bounds.width 72 | return Group { 73 | PostImageCell(images: Array(list[0].images[0...0]), width: width) 74 | PostImageCell(images: Array(list[0].images[0...1]), width: width) 75 | PostImageCell(images: Array(list[0].images[0...2]), width: width) 76 | PostImageCell(images: Array(list[0].images[0...3]), width: width) 77 | PostImageCell(images: Array(list[0].images[0...4]), width: width) 78 | PostImageCell(images: Array(list[0].images[0...5]), width: width) 79 | } 80 | .previewLayout(.fixed(width: width, height: 300)) 81 | } 82 | } 83 | -------------------------------------------------------------------------------- /PostDemo/PostListView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ContentView.swift 3 | // PostDemo 4 | // 5 | // Created by xiaoyouxinqing on 1/6/20. 6 | // Copyright © 2020 xiaoyouxinqing. All rights reserved. 7 | // 8 | 9 | import SwiftUI 10 | 11 | struct PostListView: View { 12 | let category: PostListCategory 13 | 14 | @EnvironmentObject var userData: UserData 15 | 16 | var body: some View { 17 | List { 18 | ForEach(userData.postList(for: category).list) { post in 19 | ZStack { 20 | PostCell(post: post) 21 | NavigationLink(destination: PostDetailView(post: post)) { 22 | EmptyView() 23 | } 24 | .hidden() 25 | } 26 | .listRowInsets(EdgeInsets()) 27 | } 28 | } 29 | 30 | /* 31 | // Left margin is not removed 32 | List(postList.list, id: \.name) { post in 33 | PostCell(post: post) 34 | } 35 | */ 36 | } 37 | } 38 | 39 | struct PostListView_Previews: PreviewProvider { 40 | static var previews: some View { 41 | NavigationView { 42 | PostListView(category: .recommend) 43 | .environmentObject(UserData()) 44 | .navigationBarTitle("Title") 45 | .navigationBarHidden(true) 46 | } 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /PostDemo/PostVIPBadge.swift: -------------------------------------------------------------------------------- 1 | // 2 | // PostVIPBadge.swift 3 | // PostDemo 4 | // 5 | // Created by xiaoyouxinqing on 1/17/20. 6 | // Copyright © 2020 xiaoyouxinqing. All rights reserved. 7 | // 8 | 9 | import SwiftUI 10 | 11 | struct PostVIPBadge: View { 12 | let vip: Bool 13 | 14 | var body: some View { 15 | Group { 16 | if vip { 17 | Text("V") 18 | .bold() 19 | .font(.system(size: 11)) 20 | .frame(width: 15, height: 15) 21 | .foregroundColor(.yellow) 22 | .background(Color.red) 23 | .clipShape(Circle()) 24 | .overlay( 25 | RoundedRectangle(cornerRadius: 7.5) 26 | .stroke(Color.white, lineWidth: 1) 27 | ) 28 | } 29 | } 30 | } 31 | } 32 | 33 | struct PostVIPBadge_Previews: PreviewProvider { 34 | static var previews: some View { 35 | PostVIPBadge(vip: true) 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /PostDemo/Preview Content/Preview Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /PostDemo/Resources/005tnxzUly8gab4i2r73xj30u00u0js8.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiaoyouxinqing/PostDemo/392dc6e0c7b5d54a7432bf49e9458c58fbc9f547/PostDemo/Resources/005tnxzUly8gab4i2r73xj30u00u0js8.jpg -------------------------------------------------------------------------------- /PostDemo/Resources/006PdkDogy1gap6ngiyn3j30u011idle.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiaoyouxinqing/PostDemo/392dc6e0c7b5d54a7432bf49e9458c58fbc9f547/PostDemo/Resources/006PdkDogy1gap6ngiyn3j30u011idle.jpg -------------------------------------------------------------------------------- /PostDemo/Resources/006PdkDogy1gap6ngj12ej30u011itf7.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiaoyouxinqing/PostDemo/392dc6e0c7b5d54a7432bf49e9458c58fbc9f547/PostDemo/Resources/006PdkDogy1gap6ngj12ej30u011itf7.jpg -------------------------------------------------------------------------------- /PostDemo/Resources/006PdkDoly8ffywe2fq39j304g04gwed.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiaoyouxinqing/PostDemo/392dc6e0c7b5d54a7432bf49e9458c58fbc9f547/PostDemo/Resources/006PdkDoly8ffywe2fq39j304g04gwed.jpg -------------------------------------------------------------------------------- /PostDemo/Resources/006gWxMEly1gavap86qr9j30ht0qo40t.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiaoyouxinqing/PostDemo/392dc6e0c7b5d54a7432bf49e9458c58fbc9f547/PostDemo/Resources/006gWxMEly1gavap86qr9j30ht0qo40t.jpg -------------------------------------------------------------------------------- /PostDemo/Resources/006gWxMEly1gavap88gttj30hs0a0dgf.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiaoyouxinqing/PostDemo/392dc6e0c7b5d54a7432bf49e9458c58fbc9f547/PostDemo/Resources/006gWxMEly1gavap88gttj30hs0a0dgf.jpg -------------------------------------------------------------------------------- /PostDemo/Resources/006gWxMEly1gavap8dywoj30hs0bwq48.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiaoyouxinqing/PostDemo/392dc6e0c7b5d54a7432bf49e9458c58fbc9f547/PostDemo/Resources/006gWxMEly1gavap8dywoj30hs0bwq48.jpg -------------------------------------------------------------------------------- /PostDemo/Resources/006gWxMEly1gavap8vsqaj30hs0bwgm6.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiaoyouxinqing/PostDemo/392dc6e0c7b5d54a7432bf49e9458c58fbc9f547/PostDemo/Resources/006gWxMEly1gavap8vsqaj30hs0bwgm6.jpg -------------------------------------------------------------------------------- /PostDemo/Resources/006gWxMEly8g0bjpl3ynij30kv0kv773.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiaoyouxinqing/PostDemo/392dc6e0c7b5d54a7432bf49e9458c58fbc9f547/PostDemo/Resources/006gWxMEly8g0bjpl3ynij30kv0kv773.jpg -------------------------------------------------------------------------------- /PostDemo/Resources/4e7f0c83gy1gam2misv31j21hc0u016k.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiaoyouxinqing/PostDemo/392dc6e0c7b5d54a7432bf49e9458c58fbc9f547/PostDemo/Resources/4e7f0c83gy1gam2misv31j21hc0u016k.jpg -------------------------------------------------------------------------------- /PostDemo/Resources/4e7f0c83gy1gam2mjhk8zj21hc0v6wnx.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiaoyouxinqing/PostDemo/392dc6e0c7b5d54a7432bf49e9458c58fbc9f547/PostDemo/Resources/4e7f0c83gy1gam2mjhk8zj21hc0v6wnx.jpg -------------------------------------------------------------------------------- /PostDemo/Resources/4e7f0c83gy1gam2ml6nucj22tc240kjl.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiaoyouxinqing/PostDemo/392dc6e0c7b5d54a7432bf49e9458c58fbc9f547/PostDemo/Resources/4e7f0c83gy1gam2ml6nucj22tc240kjl.jpg -------------------------------------------------------------------------------- /PostDemo/Resources/4e7f0c83gy1gam2mn58d3j22tc240qv5.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiaoyouxinqing/PostDemo/392dc6e0c7b5d54a7432bf49e9458c58fbc9f547/PostDemo/Resources/4e7f0c83gy1gam2mn58d3j22tc240qv5.jpg -------------------------------------------------------------------------------- /PostDemo/Resources/4e7f0c83gy1gam2mp0x4pj22tc240u0x.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiaoyouxinqing/PostDemo/392dc6e0c7b5d54a7432bf49e9458c58fbc9f547/PostDemo/Resources/4e7f0c83gy1gam2mp0x4pj22tc240u0x.jpg -------------------------------------------------------------------------------- /PostDemo/Resources/4e7f0c83gy1gam2mr1b81j22tc2407wi.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiaoyouxinqing/PostDemo/392dc6e0c7b5d54a7432bf49e9458c58fbc9f547/PostDemo/Resources/4e7f0c83gy1gam2mr1b81j22tc2407wi.jpg -------------------------------------------------------------------------------- /PostDemo/Resources/4e7f0c83ly8g1ho507078j20ro0rojtq.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiaoyouxinqing/PostDemo/392dc6e0c7b5d54a7432bf49e9458c58fbc9f547/PostDemo/Resources/4e7f0c83ly8g1ho507078j20ro0rojtq.jpg -------------------------------------------------------------------------------- /PostDemo/Resources/630584a6gy1gau54zgaxhj20m80et0vq.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiaoyouxinqing/PostDemo/392dc6e0c7b5d54a7432bf49e9458c58fbc9f547/PostDemo/Resources/630584a6gy1gau54zgaxhj20m80et0vq.jpg -------------------------------------------------------------------------------- /PostDemo/Resources/630584a6gy1gau54zl806j20m80etmzo.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiaoyouxinqing/PostDemo/392dc6e0c7b5d54a7432bf49e9458c58fbc9f547/PostDemo/Resources/630584a6gy1gau54zl806j20m80etmzo.jpg -------------------------------------------------------------------------------- /PostDemo/Resources/630584a6gy1gau54zm4dtj20m80dftbv.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiaoyouxinqing/PostDemo/392dc6e0c7b5d54a7432bf49e9458c58fbc9f547/PostDemo/Resources/630584a6gy1gau54zm4dtj20m80dftbv.jpg -------------------------------------------------------------------------------- /PostDemo/Resources/630584a6gy1gau54zyj61j20m80etn07.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiaoyouxinqing/PostDemo/392dc6e0c7b5d54a7432bf49e9458c58fbc9f547/PostDemo/Resources/630584a6gy1gau54zyj61j20m80etn07.jpg -------------------------------------------------------------------------------- /PostDemo/Resources/630584a6ly8fqs5wwkkmrj20ku0kuta7.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiaoyouxinqing/PostDemo/392dc6e0c7b5d54a7432bf49e9458c58fbc9f547/PostDemo/Resources/630584a6ly8fqs5wwkkmrj20ku0kuta7.jpg -------------------------------------------------------------------------------- /PostDemo/Resources/648ed25bjw8est9nqrtnij20500503yr.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiaoyouxinqing/PostDemo/392dc6e0c7b5d54a7432bf49e9458c58fbc9f547/PostDemo/Resources/648ed25bjw8est9nqrtnij20500503yr.jpg -------------------------------------------------------------------------------- /PostDemo/Resources/6a2afec3gy1gaulykcejqj20t5145wns.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiaoyouxinqing/PostDemo/392dc6e0c7b5d54a7432bf49e9458c58fbc9f547/PostDemo/Resources/6a2afec3gy1gaulykcejqj20t5145wns.jpg -------------------------------------------------------------------------------- /PostDemo/Resources/6a2afec3jw8fb4ld0qf2gj20e80dsdfz.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiaoyouxinqing/PostDemo/392dc6e0c7b5d54a7432bf49e9458c58fbc9f547/PostDemo/Resources/6a2afec3jw8fb4ld0qf2gj20e80dsdfz.jpg -------------------------------------------------------------------------------- /PostDemo/Resources/6ec3b446gy1gavd4xud8lj20j60qkwj0.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiaoyouxinqing/PostDemo/392dc6e0c7b5d54a7432bf49e9458c58fbc9f547/PostDemo/Resources/6ec3b446gy1gavd4xud8lj20j60qkwj0.jpg -------------------------------------------------------------------------------- /PostDemo/Resources/6ec3b446gy1gavd51jc4lj20j60pmwhl.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiaoyouxinqing/PostDemo/392dc6e0c7b5d54a7432bf49e9458c58fbc9f547/PostDemo/Resources/6ec3b446gy1gavd51jc4lj20j60pmwhl.jpg -------------------------------------------------------------------------------- /PostDemo/Resources/6ec3b446gy1gavd523embj20j60pytd6.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiaoyouxinqing/PostDemo/392dc6e0c7b5d54a7432bf49e9458c58fbc9f547/PostDemo/Resources/6ec3b446gy1gavd523embj20j60pytd6.jpg -------------------------------------------------------------------------------- /PostDemo/Resources/6ec3b446jw1e8qgp5bmzyj2050050aa8.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiaoyouxinqing/PostDemo/392dc6e0c7b5d54a7432bf49e9458c58fbc9f547/PostDemo/Resources/6ec3b446jw1e8qgp5bmzyj2050050aa8.jpg -------------------------------------------------------------------------------- /PostDemo/Resources/700a34f6gy1gaunswwui7j20j60pl78e.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiaoyouxinqing/PostDemo/392dc6e0c7b5d54a7432bf49e9458c58fbc9f547/PostDemo/Resources/700a34f6gy1gaunswwui7j20j60pl78e.jpg -------------------------------------------------------------------------------- /PostDemo/Resources/700a34f6gy1gaunswxtlrj20j60pkgok.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiaoyouxinqing/PostDemo/392dc6e0c7b5d54a7432bf49e9458c58fbc9f547/PostDemo/Resources/700a34f6gy1gaunswxtlrj20j60pkgok.jpg -------------------------------------------------------------------------------- /PostDemo/Resources/700a34f6gy1gaunswy5qnj20j60pkadk.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiaoyouxinqing/PostDemo/392dc6e0c7b5d54a7432bf49e9458c58fbc9f547/PostDemo/Resources/700a34f6gy1gaunswy5qnj20j60pkadk.jpg -------------------------------------------------------------------------------- /PostDemo/Resources/700a34f6gy1gaunsx2jywj20j60pkaeu.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiaoyouxinqing/PostDemo/392dc6e0c7b5d54a7432bf49e9458c58fbc9f547/PostDemo/Resources/700a34f6gy1gaunsx2jywj20j60pkaeu.jpg -------------------------------------------------------------------------------- /PostDemo/Resources/700a34f6gy1gaunsxgzixj20j60edmz8.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiaoyouxinqing/PostDemo/392dc6e0c7b5d54a7432bf49e9458c58fbc9f547/PostDemo/Resources/700a34f6gy1gaunsxgzixj20j60edmz8.jpg -------------------------------------------------------------------------------- /PostDemo/Resources/700a34f6gy1gaunsxhp4pj20j60pkn1k.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiaoyouxinqing/PostDemo/392dc6e0c7b5d54a7432bf49e9458c58fbc9f547/PostDemo/Resources/700a34f6gy1gaunsxhp4pj20j60pkn1k.jpg -------------------------------------------------------------------------------- /PostDemo/Resources/700a34f6ly8g9a29rjt92j20fn0iqdg8.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiaoyouxinqing/PostDemo/392dc6e0c7b5d54a7432bf49e9458c58fbc9f547/PostDemo/Resources/700a34f6ly8g9a29rjt92j20fn0iqdg8.jpg -------------------------------------------------------------------------------- /PostDemo/Resources/76297935ly1gatz89dzblj23402c0qv6.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiaoyouxinqing/PostDemo/392dc6e0c7b5d54a7432bf49e9458c58fbc9f547/PostDemo/Resources/76297935ly1gatz89dzblj23402c0qv6.jpg -------------------------------------------------------------------------------- /PostDemo/Resources/76297935ly1gatz8g5rvxj22c03401kz.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiaoyouxinqing/PostDemo/392dc6e0c7b5d54a7432bf49e9458c58fbc9f547/PostDemo/Resources/76297935ly1gatz8g5rvxj22c03401kz.jpg -------------------------------------------------------------------------------- /PostDemo/Resources/76297935ly1gatz8k5itij22c02c01ky.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiaoyouxinqing/PostDemo/392dc6e0c7b5d54a7432bf49e9458c58fbc9f547/PostDemo/Resources/76297935ly1gatz8k5itij22c02c01ky.jpg -------------------------------------------------------------------------------- /PostDemo/Resources/76297935ly1gatz8obqvkj22c0340npe.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiaoyouxinqing/PostDemo/392dc6e0c7b5d54a7432bf49e9458c58fbc9f547/PostDemo/Resources/76297935ly1gatz8obqvkj22c0340npe.jpg -------------------------------------------------------------------------------- /PostDemo/Resources/76297935ly8g4phfkq68hj20u00u0mzt.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiaoyouxinqing/PostDemo/392dc6e0c7b5d54a7432bf49e9458c58fbc9f547/PostDemo/Resources/76297935ly8g4phfkq68hj20u00u0mzt.jpg -------------------------------------------------------------------------------- /PostDemo/Resources/7f9147a5ly1fzxlgxgzpij20e90fltsj.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiaoyouxinqing/PostDemo/392dc6e0c7b5d54a7432bf49e9458c58fbc9f547/PostDemo/Resources/7f9147a5ly1fzxlgxgzpij20e90fltsj.jpg -------------------------------------------------------------------------------- /PostDemo/Resources/7f9147a5ly1fzxlh4ovuej20e90fl4fo.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiaoyouxinqing/PostDemo/392dc6e0c7b5d54a7432bf49e9458c58fbc9f547/PostDemo/Resources/7f9147a5ly1fzxlh4ovuej20e90fl4fo.jpg -------------------------------------------------------------------------------- /PostDemo/Resources/7f9147a5ly1fzxlh6hzdnj20e90fl7me.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiaoyouxinqing/PostDemo/392dc6e0c7b5d54a7432bf49e9458c58fbc9f547/PostDemo/Resources/7f9147a5ly1fzxlh6hzdnj20e90fl7me.jpg -------------------------------------------------------------------------------- /PostDemo/Resources/8697cf1ely8gashxj3b09j20u00u040v.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiaoyouxinqing/PostDemo/392dc6e0c7b5d54a7432bf49e9458c58fbc9f547/PostDemo/Resources/8697cf1ely8gashxj3b09j20u00u040v.jpg -------------------------------------------------------------------------------- /PostDemo/Resources/8a0b5544gy1gauy2ex786j20u0129aed.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiaoyouxinqing/PostDemo/392dc6e0c7b5d54a7432bf49e9458c58fbc9f547/PostDemo/Resources/8a0b5544gy1gauy2ex786j20u0129aed.jpg -------------------------------------------------------------------------------- /PostDemo/Resources/8a0b5544gy1gauy2flua6j20u00hitab.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiaoyouxinqing/PostDemo/392dc6e0c7b5d54a7432bf49e9458c58fbc9f547/PostDemo/Resources/8a0b5544gy1gauy2flua6j20u00hitab.jpg -------------------------------------------------------------------------------- /PostDemo/Resources/8a0b5544gy1gauy2g35yoj20u00fomzf.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiaoyouxinqing/PostDemo/392dc6e0c7b5d54a7432bf49e9458c58fbc9f547/PostDemo/Resources/8a0b5544gy1gauy2g35yoj20u00fomzf.jpg -------------------------------------------------------------------------------- /PostDemo/Resources/8a0b5544gy1gauy2gmkg9j20u00gegnp.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiaoyouxinqing/PostDemo/392dc6e0c7b5d54a7432bf49e9458c58fbc9f547/PostDemo/Resources/8a0b5544gy1gauy2gmkg9j20u00gegnp.jpg -------------------------------------------------------------------------------- /PostDemo/Resources/8a0b5544gy1gauy2gz000j20u00n6wgj.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiaoyouxinqing/PostDemo/392dc6e0c7b5d54a7432bf49e9458c58fbc9f547/PostDemo/Resources/8a0b5544gy1gauy2gz000j20u00n6wgj.jpg -------------------------------------------------------------------------------- /PostDemo/Resources/8a0b5544gy1gauy2hcozsj20u01czdiy.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiaoyouxinqing/PostDemo/392dc6e0c7b5d54a7432bf49e9458c58fbc9f547/PostDemo/Resources/8a0b5544gy1gauy2hcozsj20u01czdiy.jpg -------------------------------------------------------------------------------- /PostDemo/Resources/8a0b5544jw1e8qgp5bmzyj2050050aa8.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiaoyouxinqing/PostDemo/392dc6e0c7b5d54a7432bf49e9458c58fbc9f547/PostDemo/Resources/8a0b5544jw1e8qgp5bmzyj2050050aa8.jpg -------------------------------------------------------------------------------- /PostDemo/Resources/9dc7402fgy1gavd367p0pj20j60nywic.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiaoyouxinqing/PostDemo/392dc6e0c7b5d54a7432bf49e9458c58fbc9f547/PostDemo/Resources/9dc7402fgy1gavd367p0pj20j60nywic.jpg -------------------------------------------------------------------------------- /PostDemo/Resources/9dc7402fgy1gavd37l9nwj20j60ny44q.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiaoyouxinqing/PostDemo/392dc6e0c7b5d54a7432bf49e9458c58fbc9f547/PostDemo/Resources/9dc7402fgy1gavd37l9nwj20j60ny44q.jpg -------------------------------------------------------------------------------- /PostDemo/Resources/9dc7402fgy1gavd38kqjtj20j60nyn1d.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiaoyouxinqing/PostDemo/392dc6e0c7b5d54a7432bf49e9458c58fbc9f547/PostDemo/Resources/9dc7402fgy1gavd38kqjtj20j60nyn1d.jpg -------------------------------------------------------------------------------- /PostDemo/Resources/9dc7402fgy1gavd38wwlrj20j60nyq6y.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiaoyouxinqing/PostDemo/392dc6e0c7b5d54a7432bf49e9458c58fbc9f547/PostDemo/Resources/9dc7402fgy1gavd38wwlrj20j60nyq6y.jpg -------------------------------------------------------------------------------- /PostDemo/Resources/9dc7402fgy1gavd39ba15j20j60nywii.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiaoyouxinqing/PostDemo/392dc6e0c7b5d54a7432bf49e9458c58fbc9f547/PostDemo/Resources/9dc7402fgy1gavd39ba15j20j60nywii.jpg -------------------------------------------------------------------------------- /PostDemo/Resources/9dc7402fjw1e8qgp5bmzyj2050050aa8.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiaoyouxinqing/PostDemo/392dc6e0c7b5d54a7432bf49e9458c58fbc9f547/PostDemo/Resources/9dc7402fjw1e8qgp5bmzyj2050050aa8.jpg -------------------------------------------------------------------------------- /PostDemo/Resources/PostListData_hot_1.json: -------------------------------------------------------------------------------- 1 | { 2 | "list": [ 3 | { 4 | "id": 2000, 5 | "avatar": "6a2afec3jw8fb4ld0qf2gj20e80dsdfz.jpg", 6 | "vip": false, 7 | "name": "你的男孩T_T", 8 | "date": "2020-01-13 08:02", 9 | "isFollowed": false, 10 | "text": "给爸妈买的房子,让他们自己搞装修,结果非要装一个这么丑的窗户,姐姐拦也拦不住,问他们为什么,他们说下面有一个TT………[微笑]行吧,老人家开心最重要#爹妈迷惑行为#", 11 | "images": [ 12 | "6a2afec3gy1gaulykcejqj20t5145wns.jpg" 13 | ], 14 | "commentCount": 9503, 15 | "likeCount": 26085, 16 | "isLiked": false 17 | }, 18 | { 19 | "id": 2010, 20 | "avatar": "006PdkDoly8ffywe2fq39j304g04gwed.jpg", 21 | "vip": false, 22 | "name": "Eva在北欧", 23 | "date": "2020-01-12 11:08", 24 | "isFollowed": false, 25 | "text": "我可真喜欢这个卧室啊,冬天和黄色也好配。cr.puerilismus", 26 | "images": [ 27 | "006PdkDogy1gap6ngj12ej30u011itf7.jpg", 28 | "006PdkDogy1gap6ngiyn3j30u011idle.jpg" 29 | ], 30 | "commentCount": 52, 31 | "likeCount": 719, 32 | "isLiked": false 33 | }, 34 | { 35 | "id": 2020, 36 | "avatar": "6ec3b446jw1e8qgp5bmzyj2050050aa8.jpg", 37 | "vip": true, 38 | "name": "环球时尚家居", 39 | "date": "2020-01-13 02:34", 40 | "isFollowed": false, 41 | "text": "复古绿家居设计。 ​​​​要想生活过得去,必须有点绿[微笑]", 42 | "images": [ 43 | "6ec3b446gy1gavd4xud8lj20j60qkwj0.jpg", 44 | "6ec3b446gy1gavd51jc4lj20j60pmwhl.jpg", 45 | "6ec3b446gy1gavd523embj20j60pytd6.jpg" 46 | ], 47 | "commentCount": 4, 48 | "likeCount": 61, 49 | "isLiked": false 50 | }, 51 | { 52 | "id": 2030, 53 | "avatar": "630584a6ly8fqs5wwkkmrj20ku0kuta7.jpg", 54 | "vip": false, 55 | "name": "美式北欧控", 56 | "date": "2020-01-13 02:19", 57 | "isFollowed": false, 58 | "text": "二手房改造,小空间“再次”逆袭。65平米北欧风格两居室。#美好家居打造法# ---Len-卢", 59 | "images": [ 60 | "630584a6gy1gau54zm4dtj20m80dftbv.jpg", 61 | "630584a6gy1gau54zgaxhj20m80et0vq.jpg", 62 | "630584a6gy1gau54zl806j20m80etmzo.jpg", 63 | "630584a6gy1gau54zyj61j20m80etn07.jpg" 64 | ], 65 | "commentCount": 34, 66 | "likeCount": 464, 67 | "isLiked": false 68 | }, 69 | { 70 | "id": 2040, 71 | "avatar": "9dc7402fjw1e8qgp5bmzyj2050050aa8.jpg", 72 | "vip": true, 73 | "name": "顶尖创意家居", 74 | "date": "2020-01-13 02:05", 75 | "isFollowed": false, 76 | "text": "秋日的焦糖色,很甜[心]", 77 | "images": [ 78 | "9dc7402fgy1gavd367p0pj20j60nywic.jpg", 79 | "9dc7402fgy1gavd38kqjtj20j60nyn1d.jpg", 80 | "9dc7402fgy1gavd38wwlrj20j60nyq6y.jpg", 81 | "9dc7402fgy1gavd39ba15j20j60nywii.jpg", 82 | "9dc7402fgy1gavd37l9nwj20j60ny44q.jpg" 83 | ], 84 | "commentCount": 0, 85 | "likeCount": 50, 86 | "isLiked": false 87 | }, 88 | { 89 | "id": 2050, 90 | "avatar": "8a0b5544jw1e8qgp5bmzyj2050050aa8.jpg", 91 | "vip": true, 92 | "name": "环球家居榜", 93 | "date": "2020-01-13 01:40", 94 | "isFollowed": false, 95 | "text": "100平现代轻奢风,舒服的色彩~ ​​​#家居装修#", 96 | "images": [ 97 | "8a0b5544gy1gauy2g35yoj20u00fomzf.jpg", 98 | "8a0b5544gy1gauy2ex786j20u0129aed.jpg", 99 | "8a0b5544gy1gauy2gmkg9j20u00gegnp.jpg", 100 | "8a0b5544gy1gauy2flua6j20u00hitab.jpg", 101 | "8a0b5544gy1gauy2gz000j20u00n6wgj.jpg", 102 | "8a0b5544gy1gauy2hcozsj20u01czdiy.jpg" 103 | ], 104 | "commentCount": 106, 105 | "likeCount": 396, 106 | "isLiked": false 107 | }, 108 | { 109 | "id": 2060, 110 | "avatar": "8697cf1ely8gashxj3b09j20u00u040v.jpg", 111 | "vip": false, 112 | "name": "千岁Hiko", 113 | "date": "2020-01-13 00:51", 114 | "isFollowed": false, 115 | "text": "原宿有一家叫做“Opening Ceremony”的买手店和边上的一家叫做“RAGTAG”的中古店,表参道有一家叫做“Kare”的艺术家居店,是我最喜欢的三家店,希望看到这条微博的你有机会可以去看。", 116 | "images": [], 117 | "commentCount": 0, 118 | "likeCount": 2, 119 | "isLiked": false 120 | }, 121 | { 122 | "id": 2070, 123 | "avatar": "700a34f6ly8g9a29rjt92j20fn0iqdg8.jpg", 124 | "vip": false, 125 | "name": "室内设计师-郭飞", 126 | "date": "2020-01-13 01:35", 127 | "isFollowed": false, 128 | "text": "墨尔本现代时尚住宅丨#设计美学# #家居#", 129 | "images": [ 130 | "700a34f6gy1gaunsx2jywj20j60pkaeu.jpg", 131 | "700a34f6gy1gaunswxtlrj20j60pkgok.jpg", 132 | "700a34f6gy1gaunswy5qnj20j60pkadk.jpg", 133 | "700a34f6gy1gaunswwui7j20j60pl78e.jpg", 134 | "700a34f6gy1gaunsxgzixj20j60edmz8.jpg", 135 | "700a34f6gy1gaunsxhp4pj20j60pkn1k.jpg" 136 | ], 137 | "commentCount": 0, 138 | "likeCount": 10, 139 | "isLiked": false 140 | }, 141 | { 142 | "id": 2080, 143 | "avatar": "006gWxMEly8g0bjpl3ynij30kv0kv773.jpg", 144 | "vip": true, 145 | "name": "环球家居饰品", 146 | "date": "2020-01-13 01:34", 147 | "isFollowed": false, 148 | "text": "家,应该是随性的、随心的、放松的、安心的 。随性的摆放令客厅与其他空间最大限度的链接,舒适且惬意 #家居美学##家装设计#", 149 | "images": [ 150 | "006gWxMEly1gavap86qr9j30ht0qo40t.jpg", 151 | "006gWxMEly1gavap8dywoj30hs0bwq48.jpg", 152 | "006gWxMEly1gavap8vsqaj30hs0bwgm6.jpg", 153 | "006gWxMEly1gavap88gttj30hs0a0dgf.jpg" 154 | ], 155 | "commentCount": 0, 156 | "likeCount": 6, 157 | "isLiked": false 158 | } 159 | ] 160 | } 161 | -------------------------------------------------------------------------------- /PostDemo/Resources/PostListData_recommend_1.json: -------------------------------------------------------------------------------- 1 | { 2 | "list": [ 3 | { 4 | "id": 1000, 5 | "avatar": "4e7f0c83ly8g1ho507078j20ro0rojtq.jpg", 6 | "vip": true, 7 | "name": "娄艺潇", 8 | "date": "2020-01-05 22:51", 9 | "isFollowed": false, 10 | "text": "潮汕菜太好吃了,暴饮暴食后的我为了明天能穿上演出礼服,不得不徒步走回酒店,边走边锻炼,别夸我敬业,毕竟彩排完我还想吃顿宵夜。[允悲]还有啥推荐的美食不?", 11 | "images": [ 12 | "4e7f0c83gy1gam2misv31j21hc0u016k.jpg", 13 | "4e7f0c83gy1gam2mjhk8zj21hc0v6wnx.jpg", 14 | "4e7f0c83gy1gam2ml6nucj22tc240kjl.jpg", 15 | "4e7f0c83gy1gam2mn58d3j22tc240qv5.jpg", 16 | "4e7f0c83gy1gam2mp0x4pj22tc240u0x.jpg", 17 | "4e7f0c83gy1gam2mr1b81j22tc2407wi.jpg" 18 | ], 19 | "commentCount": 2200, 20 | "likeCount": 11319, 21 | "isLiked": true 22 | }, 23 | { 24 | "id": 1010, 25 | "avatar": "76297935ly8g4phfkq68hj20u00u0mzt.jpg", 26 | "vip": false, 27 | "name": "刘海宽_hill", 28 | "date": "2020-01-12 19:05", 29 | "isFollowed": false, 30 | "text": "今天,饿了。\n我要吃火锅。\n吃完这一桌。​", 31 | "images": [ 32 | "76297935ly1gatz8g5rvxj22c03401kz.jpg", 33 | "76297935ly1gatz89dzblj23402c0qv6.jpg", 34 | "76297935ly1gatz8k5itij22c02c01ky.jpg", 35 | "76297935ly1gatz8obqvkj22c0340npe.jpg" 36 | ], 37 | "commentCount": 4236, 38 | "likeCount": 48626, 39 | "isLiked": false 40 | }, 41 | { 42 | "id": 1020, 43 | "avatar": "648ed25bjw8est9nqrtnij20500503yr.jpg", 44 | "vip": true, 45 | "name": "美食攻略菌", 46 | "date": "2020-01-13 03:21", 47 | "isFollowed": false, 48 | "text": "酸辣米线,味道完全不输外面小摊,自制的干净卫生,好吃又解馋![馋嘴] #不可辜负的美食#", 49 | "images": [ 50 | "7f9147a5ly1fzxlgxgzpij20e90fltsj.jpg", 51 | "7f9147a5ly1fzxlh4ovuej20e90fl4fo.jpg", 52 | "7f9147a5ly1fzxlh6hzdnj20e90fl7me.jpg" 53 | ], 54 | "commentCount": 0, 55 | "likeCount": 3, 56 | "isLiked": false 57 | }, 58 | { 59 | "id": 1030, 60 | "avatar": "d0c21786ly8fsax1ftiifj20ro0ro43g.jpg", 61 | "vip": true, 62 | "name": "旅游收录菌", 63 | "date": "2020-01-13 03:12", 64 | "isFollowed": false, 65 | "text": "【西班牙格塔里亚镇】格塔里亚镇是西班牙的海鲜厨房,它以其丰富的海产品而闻名于世,比斯开湾出产的小鱿鱼和大比目鱼数量惊人,烧烤类的海产品品种繁多。来Getaria旅游,我们可以尽情享受美食,像本地人一样穿着奶油色的羊绒装,挤进牛排店大口的嚼着牛排,沉湎在极具西班牙特色的狂欢之中。", 66 | "images": [ 67 | "d0c21786ly1gavj2btv6tj20c80790tg.jpg", 68 | "d0c21786ly1gavj2c0kcej20c8096dh7.jpg", 69 | "d0c21786ly1gavj2cdrkyj20c80720tg.jpg", 70 | "d0c21786ly1gavj2cowp9j20c8083ab4.jpg", 71 | "d0c21786ly1gavj2d17d9j20c808zq3r.jpg" 72 | ], 73 | "commentCount": 0, 74 | "likeCount": 0, 75 | "isLiked": false 76 | }, 77 | { 78 | "id": 1040, 79 | "avatar": "005tnxzUly8gab4i2r73xj30u00u0js8.jpg", 80 | "vip": false, 81 | "name": "叛逆行为艺术", 82 | "date": "2020-01-13 02:17", 83 | "isFollowed": false, 84 | "text": "熬夜的好处\n1.深夜很多人喜欢发自己的秘密,可以收集到很多的文艺复兴的情感语录以及非主流句子,跟逛网易云热评似的\n2.各种美食家和品酒师发定位,安利下次喝酒吃东西的地方\n3.打游戏的时候很少碰到代练,队友互动也会减少很多 有一个很和谐的游戏氛围(祖安人除外)\n4.可以看到很多人立下的flag,比如以后再也不喝酒 以后再也不熬夜 明天一定减肥(可以截图,等下次再犯发截图打脸)\n5.最重要的一点熬夜真的很爽", 85 | "images": [], 86 | "commentCount": 21, 87 | "likeCount": 72, 88 | "isLiked": false 89 | }, 90 | { 91 | "id": 1050, 92 | "avatar": "eb5c94aely8fmvumnl9baj20v90v9q49.jpg", 93 | "vip": true, 94 | "name": "日食记", 95 | "date": "2020-01-13 17:25", 96 | "isFollowed": false, 97 | "text": "我终于把腌肉和腌菜的攻略全整好了!酱油肉是冬季最迷人的东西吧,腌菜也超好吃,脆嫩入味,一会发视频馋死你们,想看的举手。", 98 | "images": [ 99 | "eb5c94aegy1gav2509cp5j20zk0k0n2j.jpg", 100 | "eb5c94aegy1gav26fycwlj20zk1h8drh.jpg", 101 | "eb5c94aegy1gav25ox6dvj20u00k1go9.jpg", 102 | "eb5c94aegy1gav25n5ibjj20zk1h8wuu.jpg" 103 | ], 104 | "commentCount": 828, 105 | "likeCount": 4662, 106 | "isLiked": false 107 | }, 108 | { 109 | "id": 1060, 110 | "avatar": "bca7fdafgw1ekhkps65b1j2050050dg4.jpg", 111 | "vip": false, 112 | "name": "美食诱惑坊", 113 | "date": "2020-01-15 12:30", 114 | "isFollowed": false, 115 | "text": "#美食# 新出炉的二次元仓鼠~~~萌化了小公举的少女心哦~~~~[鼓掌]", 116 | "images": [ 117 | "bca7fdafly1gax1gqdg6qj20c80avdgl.jpg", 118 | "bca7fdafly1gax1gqdnboj20c80atmxp.jpg", 119 | "bca7fdafly1gax1gqehdaj20c80atq3x.jpg", 120 | "bca7fdafly1gax1gqfgsjj20c80axaay.jpg", 121 | "bca7fdafly1gax1gqd9vmj20c80ayaam.jpg", 122 | "bca7fdafly1gax1gqdhouj20c80axaam.jpg" 123 | ], 124 | "commentCount": 0, 125 | "likeCount": 3, 126 | "isLiked": false 127 | }, 128 | { 129 | "id": 1070, 130 | "avatar": "c5aa834fly8g97m8ix9lcj20re0regnk.jpg", 131 | "vip": true, 132 | "name": "罗狮粉的御膳房", 133 | "date": "2020-01-15 12:26", 134 | "isFollowed": false, 135 | "text": "罗狮粉的御膳房[笑哈哈][笑哈哈]#罗云熙#\n御膳房今日美食小课堂!\n御膳房今日美食红烧排骨!\n红烧排骨做法!\n步骤一,排骨切块洗净备用\n步骤二,排骨冷水下锅加入姜片,花椒少许,料酒烧开!\n步骤三,再次冲洗干净控干水分备用!\n步骤四,起油锅倒入适量的油下冰糖炒出糖色!\n步骤五,倒入排骨翻炒均匀\n步骤六,加入姜丝,八角,桂皮翻炒均匀!\n步骤七,倒入没过排骨的水,加入老抽调色,加入适量盐调味!\n步骤八,大火烧开改中火烧一个小时左右 !\n步骤九,烧至汤汁浓稠,大火收汁即可!\n大家学会了吗?云熙要不要来一份!@罗云熙Leo\n\n#美食#", 136 | "images": [ 137 | "c5aa834fgy1gauzr6venkj20u01hc12f.jpg", 138 | "c5aa834fgy1gauzr86bp5j20pb0w47in.jpg", 139 | "c5aa834fgy1gauzr8ok78j20tz12fk8w.jpg", 140 | "c5aa834fgy1gauzr95r6fj20tw0l3dq4.jpg", 141 | "c5aa834fgy1gauzrb7s5ej20tz13qh5x.jpg" 142 | ], 143 | "commentCount": 2, 144 | "likeCount": 7, 145 | "isLiked": false 146 | } 147 | ] 148 | } 149 | -------------------------------------------------------------------------------- /PostDemo/Resources/bca7fdafgw1ekhkps65b1j2050050dg4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiaoyouxinqing/PostDemo/392dc6e0c7b5d54a7432bf49e9458c58fbc9f547/PostDemo/Resources/bca7fdafgw1ekhkps65b1j2050050dg4.jpg -------------------------------------------------------------------------------- /PostDemo/Resources/bca7fdafly1gax1gqd9vmj20c80ayaam.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiaoyouxinqing/PostDemo/392dc6e0c7b5d54a7432bf49e9458c58fbc9f547/PostDemo/Resources/bca7fdafly1gax1gqd9vmj20c80ayaam.jpg -------------------------------------------------------------------------------- /PostDemo/Resources/bca7fdafly1gax1gqdg6qj20c80avdgl.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiaoyouxinqing/PostDemo/392dc6e0c7b5d54a7432bf49e9458c58fbc9f547/PostDemo/Resources/bca7fdafly1gax1gqdg6qj20c80avdgl.jpg -------------------------------------------------------------------------------- /PostDemo/Resources/bca7fdafly1gax1gqdhouj20c80axaam.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiaoyouxinqing/PostDemo/392dc6e0c7b5d54a7432bf49e9458c58fbc9f547/PostDemo/Resources/bca7fdafly1gax1gqdhouj20c80axaam.jpg -------------------------------------------------------------------------------- /PostDemo/Resources/bca7fdafly1gax1gqdnboj20c80atmxp.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiaoyouxinqing/PostDemo/392dc6e0c7b5d54a7432bf49e9458c58fbc9f547/PostDemo/Resources/bca7fdafly1gax1gqdnboj20c80atmxp.jpg -------------------------------------------------------------------------------- /PostDemo/Resources/bca7fdafly1gax1gqehdaj20c80atq3x.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiaoyouxinqing/PostDemo/392dc6e0c7b5d54a7432bf49e9458c58fbc9f547/PostDemo/Resources/bca7fdafly1gax1gqehdaj20c80atq3x.jpg -------------------------------------------------------------------------------- /PostDemo/Resources/bca7fdafly1gax1gqfgsjj20c80axaay.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiaoyouxinqing/PostDemo/392dc6e0c7b5d54a7432bf49e9458c58fbc9f547/PostDemo/Resources/bca7fdafly1gax1gqfgsjj20c80axaay.jpg -------------------------------------------------------------------------------- /PostDemo/Resources/c5aa834fgy1gauzr6venkj20u01hc12f.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiaoyouxinqing/PostDemo/392dc6e0c7b5d54a7432bf49e9458c58fbc9f547/PostDemo/Resources/c5aa834fgy1gauzr6venkj20u01hc12f.jpg -------------------------------------------------------------------------------- /PostDemo/Resources/c5aa834fgy1gauzr86bp5j20pb0w47in.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiaoyouxinqing/PostDemo/392dc6e0c7b5d54a7432bf49e9458c58fbc9f547/PostDemo/Resources/c5aa834fgy1gauzr86bp5j20pb0w47in.jpg -------------------------------------------------------------------------------- /PostDemo/Resources/c5aa834fgy1gauzr8ok78j20tz12fk8w.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiaoyouxinqing/PostDemo/392dc6e0c7b5d54a7432bf49e9458c58fbc9f547/PostDemo/Resources/c5aa834fgy1gauzr8ok78j20tz12fk8w.jpg -------------------------------------------------------------------------------- /PostDemo/Resources/c5aa834fgy1gauzr95r6fj20tw0l3dq4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiaoyouxinqing/PostDemo/392dc6e0c7b5d54a7432bf49e9458c58fbc9f547/PostDemo/Resources/c5aa834fgy1gauzr95r6fj20tw0l3dq4.jpg -------------------------------------------------------------------------------- /PostDemo/Resources/c5aa834fgy1gauzrb7s5ej20tz13qh5x.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiaoyouxinqing/PostDemo/392dc6e0c7b5d54a7432bf49e9458c58fbc9f547/PostDemo/Resources/c5aa834fgy1gauzrb7s5ej20tz13qh5x.jpg -------------------------------------------------------------------------------- /PostDemo/Resources/c5aa834fly8g97m8ix9lcj20re0regnk.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiaoyouxinqing/PostDemo/392dc6e0c7b5d54a7432bf49e9458c58fbc9f547/PostDemo/Resources/c5aa834fly8g97m8ix9lcj20re0regnk.jpg -------------------------------------------------------------------------------- /PostDemo/Resources/d0c21786ly1gavj2btv6tj20c80790tg.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiaoyouxinqing/PostDemo/392dc6e0c7b5d54a7432bf49e9458c58fbc9f547/PostDemo/Resources/d0c21786ly1gavj2btv6tj20c80790tg.jpg -------------------------------------------------------------------------------- /PostDemo/Resources/d0c21786ly1gavj2c0kcej20c8096dh7.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiaoyouxinqing/PostDemo/392dc6e0c7b5d54a7432bf49e9458c58fbc9f547/PostDemo/Resources/d0c21786ly1gavj2c0kcej20c8096dh7.jpg -------------------------------------------------------------------------------- /PostDemo/Resources/d0c21786ly1gavj2cdrkyj20c80720tg.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiaoyouxinqing/PostDemo/392dc6e0c7b5d54a7432bf49e9458c58fbc9f547/PostDemo/Resources/d0c21786ly1gavj2cdrkyj20c80720tg.jpg -------------------------------------------------------------------------------- /PostDemo/Resources/d0c21786ly1gavj2cowp9j20c8083ab4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiaoyouxinqing/PostDemo/392dc6e0c7b5d54a7432bf49e9458c58fbc9f547/PostDemo/Resources/d0c21786ly1gavj2cowp9j20c8083ab4.jpg -------------------------------------------------------------------------------- /PostDemo/Resources/d0c21786ly1gavj2d17d9j20c808zq3r.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiaoyouxinqing/PostDemo/392dc6e0c7b5d54a7432bf49e9458c58fbc9f547/PostDemo/Resources/d0c21786ly1gavj2d17d9j20c808zq3r.jpg -------------------------------------------------------------------------------- /PostDemo/Resources/d0c21786ly8fsax1ftiifj20ro0ro43g.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiaoyouxinqing/PostDemo/392dc6e0c7b5d54a7432bf49e9458c58fbc9f547/PostDemo/Resources/d0c21786ly8fsax1ftiifj20ro0ro43g.jpg -------------------------------------------------------------------------------- /PostDemo/Resources/eb5c94aegy1gav2509cp5j20zk0k0n2j.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiaoyouxinqing/PostDemo/392dc6e0c7b5d54a7432bf49e9458c58fbc9f547/PostDemo/Resources/eb5c94aegy1gav2509cp5j20zk0k0n2j.jpg -------------------------------------------------------------------------------- /PostDemo/Resources/eb5c94aegy1gav25n5ibjj20zk1h8wuu.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiaoyouxinqing/PostDemo/392dc6e0c7b5d54a7432bf49e9458c58fbc9f547/PostDemo/Resources/eb5c94aegy1gav25n5ibjj20zk1h8wuu.jpg -------------------------------------------------------------------------------- /PostDemo/Resources/eb5c94aegy1gav25ox6dvj20u00k1go9.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiaoyouxinqing/PostDemo/392dc6e0c7b5d54a7432bf49e9458c58fbc9f547/PostDemo/Resources/eb5c94aegy1gav25ox6dvj20u00k1go9.jpg -------------------------------------------------------------------------------- /PostDemo/Resources/eb5c94aegy1gav26fycwlj20zk1h8drh.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiaoyouxinqing/PostDemo/392dc6e0c7b5d54a7432bf49e9458c58fbc9f547/PostDemo/Resources/eb5c94aegy1gav26fycwlj20zk1h8drh.jpg -------------------------------------------------------------------------------- /PostDemo/Resources/eb5c94aely8fmvumnl9baj20v90v9q49.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiaoyouxinqing/PostDemo/392dc6e0c7b5d54a7432bf49e9458c58fbc9f547/PostDemo/Resources/eb5c94aely8fmvumnl9baj20v90v9q49.jpg -------------------------------------------------------------------------------- /PostDemo/SceneDelegate.swift: -------------------------------------------------------------------------------- 1 | // 2 | // SceneDelegate.swift 3 | // PostDemo 4 | // 5 | // Created by xiaoyouxinqing on 1/6/20. 6 | // Copyright © 2020 xiaoyouxinqing. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | import SwiftUI 11 | 12 | class SceneDelegate: UIResponder, UIWindowSceneDelegate { 13 | 14 | var window: UIWindow? 15 | 16 | 17 | func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) { 18 | // Use this method to optionally configure and attach the UIWindow `window` to the provided UIWindowScene `scene`. 19 | // If using a storyboard, the `window` property will automatically be initialized and attached to the scene. 20 | // This delegate does not imply the connecting scene or session are new (see `application:configurationForConnectingSceneSession` instead). 21 | 22 | // Create the SwiftUI view that provides the window contents. 23 | let contentView = HomeView().environmentObject(UserData()) 24 | 25 | // Use a UIHostingController as window root view controller. 26 | if let windowScene = scene as? UIWindowScene { 27 | let window = UIWindow(windowScene: windowScene) 28 | window.rootViewController = UIHostingController(rootView: contentView) 29 | self.window = window 30 | window.makeKeyAndVisible() 31 | } 32 | } 33 | 34 | func sceneDidDisconnect(_ scene: UIScene) { 35 | // Called as the scene is being released by the system. 36 | // This occurs shortly after the scene enters the background, or when its session is discarded. 37 | // Release any resources associated with this scene that can be re-created the next time the scene connects. 38 | // The scene may re-connect later, as its session was not neccessarily discarded (see `application:didDiscardSceneSessions` instead). 39 | } 40 | 41 | func sceneDidBecomeActive(_ scene: UIScene) { 42 | // Called when the scene has moved from an inactive state to an active state. 43 | // Use this method to restart any tasks that were paused (or not yet started) when the scene was inactive. 44 | } 45 | 46 | func sceneWillResignActive(_ scene: UIScene) { 47 | // Called when the scene will move from an active state to an inactive state. 48 | // This may occur due to temporary interruptions (ex. an incoming phone call). 49 | } 50 | 51 | func sceneWillEnterForeground(_ scene: UIScene) { 52 | // Called as the scene transitions from the background to the foreground. 53 | // Use this method to undo the changes made on entering the background. 54 | } 55 | 56 | func sceneDidEnterBackground(_ scene: UIScene) { 57 | // Called as the scene transitions from the foreground to the background. 58 | // Use this method to save data, release shared resources, and store enough scene-specific state information 59 | // to restore the scene back to its current state. 60 | } 61 | 62 | 63 | } 64 | 65 | -------------------------------------------------------------------------------- /PostDemo/UserData.swift: -------------------------------------------------------------------------------- 1 | // 2 | // UserData.swift 3 | // PostDemo 4 | // 5 | // Created by xiaoyouxinqing on 1/13/20. 6 | // Copyright © 2020 xiaoyouxinqing. All rights reserved. 7 | // 8 | 9 | import Combine 10 | 11 | class UserData: ObservableObject { 12 | @Published var recommendPostList: PostList = loadPostListData("PostListData_recommend_1.json") 13 | @Published var hotPostList: PostList = loadPostListData("PostListData_hot_1.json") 14 | 15 | private var recommendPostDic: [Int: Int] = [:] // id: index 16 | private var hotPostDic: [Int: Int] = [:] // id: index 17 | 18 | init() { 19 | for i in 0.. PostList { 36 | switch category { 37 | case .recommend: return recommendPostList 38 | case .hot: return hotPostList 39 | } 40 | } 41 | 42 | func post(forId id: Int) -> Post? { 43 | if let index = recommendPostDic[id] { 44 | return recommendPostList.list[index] 45 | } 46 | if let index = hotPostDic[id] { 47 | return hotPostList.list[index] 48 | } 49 | return nil 50 | } 51 | 52 | func update(_ post: Post) { 53 | if let index = recommendPostDic[post.id] { 54 | recommendPostList.list[index] = post 55 | } 56 | if let index = hotPostDic[post.id] { 57 | hotPostList.list[index] = post 58 | } 59 | } 60 | } 61 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # BBCo - iOS开发入门教程 SwiftUI 微博App项目实战 2 | 3 | 手把手带你入门,零基础学习编程 4 | 5 | 微博App项目实战,一步步教你实现功能 6 | 7 | Swift 编程语言、SwiftUI 框架,学新技术,放眼未来 8 | 9 | 欢迎在视频平台关注 **BBCo** 10 | 11 | ## 代码分支 12 | 13 | 课程代码放在不同的分支,点击以下分支获取代码 14 | 15 | Lesson 1~10 代码放在 master 分支(当前分支) 16 | 17 | Lesson 11~17 代码放在 [NetworkDemo 分支](https://github.com/xiaoyouxinqing/PostDemo/tree/NetworkDemo) 18 | 19 | ## Lesson 1 20 | 21 | 创建 Xcode project (项目、工程) 22 | 23 | 添加 View 24 | 25 | bilibili: https://www.bilibili.com/video/BV1Z7411x7rX/ 26 | 27 | YouTube: https://youtu.be/5n0qoRZ8gXA 28 | 29 | ## Lesson 2 30 | 31 | 显示用户头像、昵称等内容 32 | 33 | bilibili: https://www.bilibili.com/video/BV1X7411x7ay/ 34 | 35 | YouTube: https://youtu.be/LNRs2UfYbXk 36 | 37 | ## Lesson 3 38 | 39 | 动态显示微博数据信息 40 | 41 | bilibili: https://www.bilibili.com/video/BV1L7411s76e/ 42 | 43 | YouTube: https://youtu.be/-ie-FyuyxH8 44 | 45 | ## Lesson 4 46 | 47 | 显示更多微博数据信息 48 | 49 | 显示微博列表 50 | 51 | bilibili: https://www.bilibili.com/video/BV1m7411n7pq/ 52 | 53 | YouTube: https://youtu.be/riEWkLY6MmI 54 | 55 | ## Lesson 5 56 | 57 | 一条微博显示多张图片 58 | 59 | 点击微博进入微博详情页 60 | 61 | bilibili: https://www.bilibili.com/video/BV1E7411a7Bs/ 62 | 63 | YouTube: https://youtu.be/bXbaqrjVVFA 64 | 65 | ## Lesson 6 66 | 67 | 首页“推荐”“热门”点击切换动画 68 | 69 | 首页两个微博列表水平滑动切换 70 | 71 | bilibili: https://www.bilibili.com/video/BV15741157GG/ 72 | 73 | YouTube: https://youtu.be/x4yBOTcUMOA 74 | 75 | ## Lesson 7 - 1 76 | 77 | UIKit 中 UIScrollView 的使用 78 | 79 | bilibili: https://www.bilibili.com/video/BV1Z7411g7uG/ 80 | 81 | YouTube: https://youtu.be/ylqa-gKSDcw 82 | 83 | ## Lesson 7 - 2 84 | 85 | “推荐”“热门”点击切换列表与拖拽切换列表关联 86 | 87 | bilibili: https://www.bilibili.com/video/BV1s741177sB/ 88 | 89 | YouTube: https://youtu.be/Gpxs3q5Wy84 90 | 91 | ## Lesson 8 92 | 93 | 关注、点赞 94 | 95 | bilibili: https://www.bilibili.com/video/BV1e7411A7Y9/ 96 | 97 | YouTube: https://youtu.be/A5ExzX82MUs 98 | 99 | ## Lesson 9 100 | 101 | 评论 102 | 103 | bilibili: https://www.bilibili.com/video/BV1R7411F7td/ 104 | 105 | YouTube: https://youtu.be/np6svGQ3Cck 106 | 107 | ## Lesson 10 108 | 109 | 评论功能细节 110 | 111 | 适配 iPad 112 | 113 | bilibili: https://www.bilibili.com/video/BV1L7411T71j/ 114 | 115 | YouTube: https://youtu.be/St4FQDxX96c 116 | 117 | ## Lesson 1~10 总结 118 | 119 | 入门课程知识点总结 120 | 121 | 学习方法的一点建议 122 | 123 | bilibili: https://www.bilibili.com/video/BV1SE411n7Hq/ 124 | 125 | YouTube: https://youtu.be/7JAzIJH7THM 126 | 127 | ## Lesson 11 - 1 128 | 129 | URLSession 发送网络请求,获取微博列表 130 | 131 | bilibili: https://www.bilibili.com/video/BV1fC4y1s7Js/ 132 | 133 | YouTube: https://youtu.be/m9VNJKb_5Q4 134 | 135 | ## Lesson 11 - 2 136 | 137 | HTTP 协议介绍 138 | 139 | URLRequest 设置网络请求参数 140 | 141 | bilibili: https://www.bilibili.com/video/BV1Df4y1S7NR/ 142 | 143 | YouTube: https://youtu.be/9yRhRrYhyY4 144 | 145 | ## Lesson 12 - 1 146 | 147 | 安装 CocoaPods 148 | 149 | 项目添加开源网络库 Alamofire 150 | 151 | 简单使用 Alamofire 152 | 153 | bilibili: https://www.bilibili.com/video/BV1gT4y137Rd/ 154 | 155 | YouTube: https://youtu.be/Jzvv4UaskuU 156 | 157 | ## Lesson 12 - 2 158 | 159 | 构建网络模块 160 | 161 | bilibili: https://www.bilibili.com/video/BV11K4y1b76g/ 162 | 163 | YouTube: https://youtu.be/jT9o4r_cFJM 164 | 165 | ## Lesson 12 - 3 166 | 167 | 构建网络模块 168 | 169 | bilibili: https://www.bilibili.com/video/BV1bZ4y1s7kk/ 170 | 171 | YouTube: https://youtu.be/1rOrHNwftCY 172 | 173 | ## Lesson 12 - 4 174 | 175 | 网络模块细节 176 | 177 | 模块设计总结 178 | 179 | bilibili: https://www.bilibili.com/video/BV1qC4y1W78n/ 180 | 181 | YouTube: https://youtu.be/sBzsBhCCnd0 182 | 183 | ## Lesson 11~12 补充 184 | 185 | GitHub 切换分支,下载代码,运行项目 186 | 187 | bilibili: https://www.bilibili.com/video/BV1SV411k7Hw/ 188 | 189 | YouTube: https://youtu.be/W8-w29pwReE 190 | 191 | ## Lesson 13 - 1 192 | 193 | 加载网络图片 194 | 195 | bilibili: https://www.bilibili.com/video/BV1ia4y1e74N/ 196 | 197 | YouTube: https://youtu.be/yq-eYpQcyd0 198 | 199 | ## Lesson 13 - 2 200 | 201 | SDWebImageSwiftUI 加载网络图片 202 | 203 | bilibili: https://www.bilibili.com/video/BV1U54y1D7Yi/ 204 | 205 | YouTube: https://youtu.be/Bw0w63Hm9Io 206 | 207 | ## Lesson 14 208 | 209 | 列表下拉刷新,上拉加载更多 210 | 211 | bilibili: https://www.bilibili.com/video/BV14D4y1D7M6/ 212 | 213 | YouTube: https://youtu.be/6HX7xgSVnIk 214 | 215 | ## Lesson 15 216 | 217 | 列表下拉刷新,上拉加载更多,加载错误提示框 218 | 219 | bilibili: https://www.bilibili.com/video/BV1ZT4y1E7Pi/ 220 | 221 | YouTube: https://youtu.be/gCI1Yi_7SHk 222 | 223 | ## Lesson 16 224 | 225 | 添加网络模块,请求网络数据 226 | 227 | bilibili: https://www.bilibili.com/video/BV14i4y1G7V5/ 228 | 229 | YouTube: https://youtu.be/LlLnSb3onDM 230 | 231 | ## Lesson 17 232 | 233 | 加载网络图片 234 | 235 | 处理细节,精简代码 236 | 237 | bilibili: https://www.bilibili.com/video/BV1rv411B7fj/ 238 | 239 | YouTube: https://youtu.be/lnEFk7NnTxg 240 | 241 | ## Lesson 11~17 总结 242 | 243 | 课程总结,重要知识点回顾 244 | 245 | bilibili: https://www.bilibili.com/video/BV1XZ4y1M7qR/ 246 | 247 | YouTube: https://youtu.be/UeycEQ-IepQ 248 | --------------------------------------------------------------------------------