├── .DS_Store ├── .gitignore ├── LICENSE ├── Podfile ├── Podfile.lock ├── Pods ├── Alamofire │ ├── LICENSE │ ├── README.md │ └── Source │ │ ├── AFError.swift │ │ ├── Alamofire.swift │ │ ├── AlamofireExtended.swift │ │ ├── AuthenticationInterceptor.swift │ │ ├── CachedResponseHandler.swift │ │ ├── Combine.swift │ │ ├── DispatchQueue+Alamofire.swift │ │ ├── EventMonitor.swift │ │ ├── HTTPHeaders.swift │ │ ├── HTTPMethod.swift │ │ ├── MultipartFormData.swift │ │ ├── MultipartUpload.swift │ │ ├── NetworkReachabilityManager.swift │ │ ├── Notifications.swift │ │ ├── OperationQueue+Alamofire.swift │ │ ├── ParameterEncoder.swift │ │ ├── ParameterEncoding.swift │ │ ├── Protected.swift │ │ ├── RedirectHandler.swift │ │ ├── Request.swift │ │ ├── RequestInterceptor.swift │ │ ├── RequestTaskMap.swift │ │ ├── Response.swift │ │ ├── ResponseSerialization.swift │ │ ├── Result+Alamofire.swift │ │ ├── RetryPolicy.swift │ │ ├── ServerTrustEvaluation.swift │ │ ├── Session.swift │ │ ├── SessionDelegate.swift │ │ ├── StringEncoding+Alamofire.swift │ │ ├── URLConvertible+URLRequestConvertible.swift │ │ ├── URLEncodedFormEncoder.swift │ │ ├── URLRequest+Alamofire.swift │ │ ├── URLSessionConfiguration+Alamofire.swift │ │ └── Validation.swift ├── HandyJSON │ ├── LICENSE │ ├── README.md │ └── Source │ │ ├── AnyExtensions.swift │ │ ├── BuiltInBasicType.swift │ │ ├── BuiltInBridgeType.swift │ │ ├── CBridge.swift │ │ ├── Configuration.swift │ │ ├── ContextDescriptorType.swift │ │ ├── CustomDateFormatTransform.swift │ │ ├── DataTransform.swift │ │ ├── DateFormatterTransform.swift │ │ ├── DateTransform.swift │ │ ├── Deserializer.swift │ │ ├── EnumTransform.swift │ │ ├── EnumType.swift │ │ ├── Export.swift │ │ ├── ExtendCustomBasicType.swift │ │ ├── ExtendCustomModelType.swift │ │ ├── FieldDescriptor.swift │ │ ├── HandyJSON.h │ │ ├── HelpingMapper.swift │ │ ├── HexColorTransform.swift │ │ ├── ISO8601DateTransform.swift │ │ ├── Logger.swift │ │ ├── MangledName.swift │ │ ├── Measuable.swift │ │ ├── Metadata.swift │ │ ├── NSDecimalNumberTransform.swift │ │ ├── OtherExtension.swift │ │ ├── PointerType.swift │ │ ├── Properties.swift │ │ ├── PropertyInfo.swift │ │ ├── ReflectionHelper.swift │ │ ├── Serializer.swift │ │ ├── TransformOf.swift │ │ ├── TransformType.swift │ │ ├── Transformable.swift │ │ └── URLTransform.swift ├── MJRefresh │ ├── LICENSE │ ├── MJRefresh │ │ ├── Base │ │ │ ├── MJRefreshAutoFooter.h │ │ │ ├── MJRefreshAutoFooter.m │ │ │ ├── MJRefreshBackFooter.h │ │ │ ├── MJRefreshBackFooter.m │ │ │ ├── MJRefreshComponent.h │ │ │ ├── MJRefreshComponent.m │ │ │ ├── MJRefreshFooter.h │ │ │ ├── MJRefreshFooter.m │ │ │ ├── MJRefreshHeader.h │ │ │ ├── MJRefreshHeader.m │ │ │ ├── MJRefreshTrailer.h │ │ │ └── MJRefreshTrailer.m │ │ ├── Custom │ │ │ ├── Footer │ │ │ │ ├── Auto │ │ │ │ │ ├── MJRefreshAutoGifFooter.h │ │ │ │ │ ├── MJRefreshAutoGifFooter.m │ │ │ │ │ ├── MJRefreshAutoNormalFooter.h │ │ │ │ │ ├── MJRefreshAutoNormalFooter.m │ │ │ │ │ ├── MJRefreshAutoStateFooter.h │ │ │ │ │ └── MJRefreshAutoStateFooter.m │ │ │ │ └── Back │ │ │ │ │ ├── MJRefreshBackGifFooter.h │ │ │ │ │ ├── MJRefreshBackGifFooter.m │ │ │ │ │ ├── MJRefreshBackNormalFooter.h │ │ │ │ │ ├── MJRefreshBackNormalFooter.m │ │ │ │ │ ├── MJRefreshBackStateFooter.h │ │ │ │ │ └── MJRefreshBackStateFooter.m │ │ │ ├── Header │ │ │ │ ├── MJRefreshGifHeader.h │ │ │ │ ├── MJRefreshGifHeader.m │ │ │ │ ├── MJRefreshNormalHeader.h │ │ │ │ ├── MJRefreshNormalHeader.m │ │ │ │ ├── MJRefreshStateHeader.h │ │ │ │ └── MJRefreshStateHeader.m │ │ │ └── Trailer │ │ │ │ ├── MJRefreshNormalTrailer.h │ │ │ │ ├── MJRefreshNormalTrailer.m │ │ │ │ ├── MJRefreshStateTrailer.h │ │ │ │ └── MJRefreshStateTrailer.m │ │ ├── MJRefresh.bundle │ │ │ ├── arrow@2x.png │ │ │ ├── en.lproj │ │ │ │ └── Localizable.strings │ │ │ ├── ko.lproj │ │ │ │ └── Localizable.strings │ │ │ ├── ru.lproj │ │ │ │ └── Localizable.strings │ │ │ ├── trail_arrow@2x.png │ │ │ ├── uk.lproj │ │ │ │ └── Localizable.strings │ │ │ ├── zh-Hans.lproj │ │ │ │ └── Localizable.strings │ │ │ └── zh-Hant.lproj │ │ │ │ └── Localizable.strings │ │ ├── MJRefresh.h │ │ ├── MJRefreshConfig.h │ │ ├── MJRefreshConfig.m │ │ ├── MJRefreshConst.h │ │ ├── MJRefreshConst.m │ │ ├── NSBundle+MJRefresh.h │ │ ├── NSBundle+MJRefresh.m │ │ ├── UIScrollView+MJExtension.h │ │ ├── UIScrollView+MJExtension.m │ │ ├── UIScrollView+MJRefresh.h │ │ ├── UIScrollView+MJRefresh.m │ │ ├── UIView+MJExtension.h │ │ └── UIView+MJExtension.m │ └── README.md ├── Manifest.lock ├── Moya │ ├── License.md │ ├── Readme.md │ └── Sources │ │ └── Moya │ │ ├── AnyEncodable.swift │ │ ├── Cancellable.swift │ │ ├── Endpoint.swift │ │ ├── Image.swift │ │ ├── Moya+Alamofire.swift │ │ ├── MoyaError.swift │ │ ├── MoyaProvider+Defaults.swift │ │ ├── MoyaProvider+Internal.swift │ │ ├── MoyaProvider.swift │ │ ├── MultiTarget.swift │ │ ├── MultipartFormData.swift │ │ ├── Plugin.swift │ │ ├── Plugins │ │ ├── AccessTokenPlugin.swift │ │ ├── CredentialsPlugin.swift │ │ ├── NetworkActivityPlugin.swift │ │ └── NetworkLoggerPlugin.swift │ │ ├── RequestTypeWrapper.swift │ │ ├── Response.swift │ │ ├── TargetType.swift │ │ ├── Task.swift │ │ ├── URL+Moya.swift │ │ ├── URLRequest+Encoding.swift │ │ └── ValidationType.swift ├── Pods.xcodeproj │ └── project.pbxproj ├── SnapKit │ ├── LICENSE │ ├── README.md │ └── Source │ │ ├── Constraint.swift │ │ ├── ConstraintAttributes.swift │ │ ├── ConstraintConfig.swift │ │ ├── ConstraintConstantTarget.swift │ │ ├── ConstraintDSL.swift │ │ ├── ConstraintDescription.swift │ │ ├── ConstraintDirectionalInsetTarget.swift │ │ ├── ConstraintDirectionalInsets.swift │ │ ├── ConstraintInsetTarget.swift │ │ ├── ConstraintInsets.swift │ │ ├── ConstraintItem.swift │ │ ├── ConstraintLayoutGuide+Extensions.swift │ │ ├── ConstraintLayoutGuide.swift │ │ ├── ConstraintLayoutGuideDSL.swift │ │ ├── ConstraintLayoutSupport.swift │ │ ├── ConstraintLayoutSupportDSL.swift │ │ ├── ConstraintMaker.swift │ │ ├── ConstraintMakerEditable.swift │ │ ├── ConstraintMakerExtendable.swift │ │ ├── ConstraintMakerFinalizable.swift │ │ ├── ConstraintMakerPriortizable.swift │ │ ├── ConstraintMakerRelatable.swift │ │ ├── ConstraintMultiplierTarget.swift │ │ ├── ConstraintOffsetTarget.swift │ │ ├── ConstraintPriority.swift │ │ ├── ConstraintPriorityTarget.swift │ │ ├── ConstraintRelatableTarget.swift │ │ ├── ConstraintRelation.swift │ │ ├── ConstraintView+Extensions.swift │ │ ├── ConstraintView.swift │ │ ├── ConstraintViewDSL.swift │ │ ├── Debugging.swift │ │ ├── LayoutConstraint.swift │ │ ├── LayoutConstraintItem.swift │ │ ├── Typealiases.swift │ │ └── UILayoutSupport+Extensions.swift └── Target Support Files │ ├── Alamofire │ ├── Alamofire-Info.plist │ ├── Alamofire-dummy.m │ ├── Alamofire-prefix.pch │ ├── Alamofire-umbrella.h │ ├── Alamofire.debug.xcconfig │ ├── Alamofire.modulemap │ └── Alamofire.release.xcconfig │ ├── HandyJSON │ ├── HandyJSON-Info.plist │ ├── HandyJSON-dummy.m │ ├── HandyJSON-prefix.pch │ ├── HandyJSON-umbrella.h │ ├── HandyJSON.debug.xcconfig │ ├── HandyJSON.modulemap │ └── HandyJSON.release.xcconfig │ ├── MJRefresh │ ├── MJRefresh-Info.plist │ ├── MJRefresh-dummy.m │ ├── MJRefresh-prefix.pch │ ├── MJRefresh-umbrella.h │ ├── MJRefresh.debug.xcconfig │ ├── MJRefresh.modulemap │ └── MJRefresh.release.xcconfig │ ├── Moya │ ├── Moya-Info.plist │ ├── Moya-dummy.m │ ├── Moya-prefix.pch │ ├── Moya-umbrella.h │ ├── Moya.debug.xcconfig │ ├── Moya.modulemap │ └── Moya.release.xcconfig │ ├── Pods-Shop │ ├── Pods-Shop-Info.plist │ ├── Pods-Shop-acknowledgements.markdown │ ├── Pods-Shop-acknowledgements.plist │ ├── Pods-Shop-dummy.m │ ├── Pods-Shop-frameworks-Debug-input-files.xcfilelist │ ├── Pods-Shop-frameworks-Debug-output-files.xcfilelist │ ├── Pods-Shop-frameworks-Release-input-files.xcfilelist │ ├── Pods-Shop-frameworks-Release-output-files.xcfilelist │ ├── Pods-Shop-frameworks.sh │ ├── Pods-Shop-umbrella.h │ ├── Pods-Shop.debug.xcconfig │ ├── Pods-Shop.modulemap │ └── Pods-Shop.release.xcconfig │ └── SnapKit │ ├── SnapKit-Info.plist │ ├── SnapKit-dummy.m │ ├── SnapKit-prefix.pch │ ├── SnapKit-umbrella.h │ ├── SnapKit.debug.xcconfig │ ├── SnapKit.modulemap │ └── SnapKit.release.xcconfig ├── README.md ├── Shop.xcodeproj ├── project.pbxproj └── project.xcworkspace │ ├── contents.xcworkspacedata │ └── xcshareddata │ └── IDEWorkspaceChecks.plist ├── Shop.xcworkspace ├── contents.xcworkspacedata └── xcshareddata │ └── IDEWorkspaceChecks.plist ├── Shop ├── .DS_Store ├── Cart │ ├── Controller │ │ └── RYJCartViewController.swift │ ├── Model │ │ └── RYJCartModel.swift │ └── View │ │ ├── RYJCartDiscountView.swift │ │ ├── RYJCartListView.swift │ │ └── RYJCartSettlementView.swift ├── Checkout │ ├── Controller │ │ └── RYJCheckoutViewController.swift │ └── View │ │ ├── RYJCheckoutProgressView.swift │ │ └── RYJCheckoutShipmentView.swift ├── Detail │ ├── Controller │ │ └── RYJDetailViewController.swift │ └── View │ │ ├── RYJDetailDescribeView.swift │ │ └── RYJDetailHeaderView.swift ├── Extension │ └── UIColorExtension.swift ├── Home │ ├── Controller │ │ └── RYJHomeViewController.swift │ ├── Model │ │ └── RYJHomeModel.swift │ └── View │ │ ├── LFFPraiseButton.swift │ │ ├── RYJHomeBannerView.swift │ │ └── RYJHomeLikeView.swift ├── Like │ └── RYJLikeViewController.swift ├── Resources │ ├── .DS_Store │ ├── Assets.xcassets │ │ ├── .DS_Store │ │ ├── AccentColor.colorset │ │ │ └── Contents.json │ │ ├── AppIcon.appiconset │ │ │ └── Contents.json │ │ ├── Contents.json │ │ ├── base │ │ │ ├── Contents.json │ │ │ ├── base_share.imageset │ │ │ │ ├── Contents.json │ │ │ │ ├── share@2x.png │ │ │ │ └── share@3x.png │ │ │ ├── basel_close.imageset │ │ │ │ ├── Contents.json │ │ │ │ ├── close@2x.png │ │ │ │ └── close@3x.png │ │ │ └── user_icon.imageset │ │ │ │ ├── Contents.json │ │ │ │ ├── search@2x.png │ │ │ │ └── search@3x.png │ │ ├── cart │ │ │ ├── Contents.json │ │ │ ├── cart_discount_bg.imageset │ │ │ │ ├── Contents.json │ │ │ │ ├── cart_discount_bg@2x.png │ │ │ │ └── cart_discount_bg@3x.png │ │ │ ├── cart_gift.imageset │ │ │ │ ├── Contents.json │ │ │ │ ├── cart_gift@2x.png │ │ │ │ └── cart_gift@3x.png │ │ │ ├── cart_product_1.imageset │ │ │ │ ├── Contents.json │ │ │ │ ├── cart_product_1@2x.png │ │ │ │ └── cart_product_1@3x.png │ │ │ ├── cart_product_2.imageset │ │ │ │ ├── Contents.json │ │ │ │ ├── cart_product_2@2x.png │ │ │ │ └── cart_product_2@3x.png │ │ │ ├── cart_product_3.imageset │ │ │ │ ├── Contents.json │ │ │ │ ├── cart_product_3@2x.png │ │ │ │ └── cart_product_3@3x.png │ │ │ └── cart_trash.imageset │ │ │ │ ├── Contents.json │ │ │ │ ├── cart_trash@2x.png │ │ │ │ └── cart_trash@3x.png │ │ ├── checkout │ │ │ ├── Contents.json │ │ │ ├── address_selected.imageset │ │ │ │ ├── Contents.json │ │ │ │ ├── address_selected@2x.png │ │ │ │ └── address_selected@3x.png │ │ │ ├── address_unselected.imageset │ │ │ │ ├── Contents.json │ │ │ │ ├── address_unselected@2x.png │ │ │ │ └── address_unselected@3x.png │ │ │ ├── checkout_track_1.imageset │ │ │ │ ├── Contents.json │ │ │ │ ├── checkout_track_1@2x.png │ │ │ │ └── checkout_track_1@3x.png │ │ │ ├── checkout_track_2.imageset │ │ │ │ ├── Contents.json │ │ │ │ ├── checkout_track_2@2x.png │ │ │ │ └── checkout_track_2@3x.png │ │ │ └── freight_select.imageset │ │ │ │ ├── Contents.json │ │ │ │ ├── freight_select@2x.png │ │ │ │ └── freight_select@3x.png │ │ ├── detail │ │ │ ├── Contents.json │ │ │ ├── detail_cotton.imageset │ │ │ │ ├── Contents.json │ │ │ │ ├── detail_cotton@2x.png │ │ │ │ └── detail_cotton@3x.png │ │ │ ├── detail_header.imageset │ │ │ │ ├── Contents.json │ │ │ │ ├── detail_header@2x.png │ │ │ │ └── detail_header@3x.png │ │ │ ├── detail_more_arrow.imageset │ │ │ │ ├── Contents.json │ │ │ │ ├── detail_more_arrow@2x.png │ │ │ │ └── detail_more_arrow@3x.png │ │ │ └── detail_zan.imageset │ │ │ │ ├── Contents.json │ │ │ │ ├── detail_zan@2x.png │ │ │ │ └── detail_zan@3x.png │ │ ├── home │ │ │ ├── .DS_Store │ │ │ ├── Contents.json │ │ │ ├── home_banner.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── home_banner.png │ │ │ ├── home_card.imageset │ │ │ │ ├── Contents.json │ │ │ │ ├── home_card@2x.png │ │ │ │ └── home_card@3x.png │ │ │ ├── home_like_button.imageset │ │ │ │ ├── Contents.json │ │ │ │ ├── home_like@2x.png │ │ │ │ └── home_like@3x.png │ │ │ ├── home_like_product_1.imageset │ │ │ │ ├── Contents.json │ │ │ │ ├── home_like_product_1@2x.png │ │ │ │ └── home_like_product_1@3x.png │ │ │ └── home_like_product_2.imageset │ │ │ │ ├── Contents.json │ │ │ │ ├── home_like_product_2@2x.png │ │ │ │ └── home_like_product_2@3x.png │ │ ├── search │ │ │ ├── Contents.json │ │ │ ├── rank_shirt.imageset │ │ │ │ ├── Contents.json │ │ │ │ ├── rank_shirt@2x.png │ │ │ │ └── rank_shirt@3x.png │ │ │ ├── rank_shoes.imageset │ │ │ │ ├── Contents.json │ │ │ │ ├── rank_shoes@2x.png │ │ │ │ └── rank_shoes@3x.png │ │ │ ├── rank_trousers.imageset │ │ │ │ ├── Contents.json │ │ │ │ ├── rank_trousers@2x.png │ │ │ │ └── rank_trousers@3x.png │ │ │ ├── search_ad.imageset │ │ │ │ ├── Contents.json │ │ │ │ ├── search_ad@2x.png │ │ │ │ └── search_ad@3x.png │ │ │ └── search_recent_more.imageset │ │ │ │ ├── Contents.json │ │ │ │ ├── search_recent_more@2x.png │ │ │ │ └── search_recent_more@3x.png │ │ └── tabbar │ │ │ ├── Contents.json │ │ │ ├── normal │ │ │ ├── Contents.json │ │ │ ├── tabbar_cart.imageset │ │ │ │ ├── Contents.json │ │ │ │ ├── tabbar_cart@2x.png │ │ │ │ └── tabbar_cart@3x.png │ │ │ ├── tabbar_home.imageset │ │ │ │ ├── Contents.json │ │ │ │ ├── tabbar_home@2x.png │ │ │ │ └── tabbar_home@3x.png │ │ │ ├── tabbar_like.imageset │ │ │ │ ├── Contents.json │ │ │ │ ├── tabbar_like@2x.png │ │ │ │ └── tabbar_like@3x.png │ │ │ └── tabbar_search.imageset │ │ │ │ ├── Contents.json │ │ │ │ ├── tabbar_serach@2x.png │ │ │ │ └── tabbar_serach@3x.png │ │ │ └── select │ │ │ ├── Contents.json │ │ │ ├── tabbar_cart_sel.imageset │ │ │ ├── Contents.json │ │ │ ├── tabbar_cart_sel@2x.png │ │ │ └── tabbar_cart_sel@3x.png │ │ │ ├── tabbar_home_sel.imageset │ │ │ ├── Contents.json │ │ │ ├── tabbar_home_sel@2x.png │ │ │ └── tabbar_home_sel@3x.png │ │ │ ├── tabbar_like_sel.imageset │ │ │ ├── Contents.json │ │ │ ├── tabbar_like_sel@2x.png │ │ │ └── tabbar_like_sel@3x.png │ │ │ └── tabbar_search_sel.imageset │ │ │ ├── Contents.json │ │ │ ├── tabbar_search_sel@2x.png │ │ │ └── tabbar_search_sel@3x.png │ ├── Base.lproj │ │ ├── LaunchScreen.storyboard │ │ └── Main.storyboard │ ├── Info.plist │ └── ViewController.swift ├── Search │ ├── Controller │ │ └── RYJSearchViewController.swift │ └── View │ │ ├── RYJSearchRankingView.swift │ │ └── RYJSearchRecentView.swift └── System │ ├── AppDelegate.swift │ ├── Global.swift │ ├── Network │ ├── RYJShopAPI.swift │ └── RYJShopModel.swift │ ├── RYJBaseViewController.swift │ ├── RYJTabBarController.swift │ └── Refresh │ └── RYJRefresh.swift ├── ShopTests ├── Info.plist └── ShopTests.swift └── ShopUITests ├── Info.plist └── ShopUITests.swift /.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/developRen/Shop/20237b60e26ce78fb2c622ab285b886402fa2bb6/.DS_Store -------------------------------------------------------------------------------- /.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 | # CocoaPods 34 | # 35 | # We recommend against adding the Pods directory to your .gitignore. However 36 | # you should judge for yourself, the pros and cons are mentioned at: 37 | # https://guides.cocoapods.org/using/using-cocoapods.html#should-i-check-the-pods-directory-into-source-control 38 | # 39 | # Pods/ 40 | # 41 | # Add this line if you want to avoid checking in source code from the Xcode workspace 42 | # *.xcworkspace 43 | 44 | # Carthage 45 | # 46 | # Add this line if you want to avoid checking in source code from Carthage dependencies. 47 | # Carthage/Checkouts 48 | 49 | Carthage/Build/ 50 | 51 | # fastlane 52 | # 53 | # It is recommended to not store the screenshots in the git repo. 54 | # Instead, use fastlane to re-generate the screenshots whenever they are needed. 55 | # For more information about the recommended setup visit: 56 | # https://docs.fastlane.tools/best-practices/source-control/#source-control 57 | 58 | fastlane/report.xml 59 | fastlane/Preview.html 60 | fastlane/screenshots/**/*.png 61 | fastlane/test_output 62 | 63 | # Code Injection 64 | # 65 | # After new code Injection tools there's a generated folder /iOSInjectionProject 66 | # https://github.com/johnno1962/injectionforxcode 67 | 68 | iOSInjectionProject/ 69 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2020 任一杰 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /Podfile: -------------------------------------------------------------------------------- 1 | platform :ios, '10.0' 2 | 3 | use_frameworks! 4 | inhibit_all_warnings! 5 | 6 | target 'Shop' do 7 | 8 | pod 'SnapKit' 9 | pod 'MJRefresh' 10 | pod 'Moya' 11 | pod 'Alamofire' 12 | pod 'HandyJSON' 13 | 14 | end 15 | -------------------------------------------------------------------------------- /Podfile.lock: -------------------------------------------------------------------------------- 1 | PODS: 2 | - Alamofire (5.4.1) 3 | - HandyJSON (5.0.2) 4 | - MJRefresh (3.5.0) 5 | - Moya (14.0.0): 6 | - Moya/Core (= 14.0.0) 7 | - Moya/Core (14.0.0): 8 | - Alamofire (~> 5.0) 9 | - SnapKit (5.0.1) 10 | 11 | DEPENDENCIES: 12 | - Alamofire 13 | - HandyJSON 14 | - MJRefresh 15 | - Moya 16 | - SnapKit 17 | 18 | SPEC REPOS: 19 | trunk: 20 | - Alamofire 21 | - HandyJSON 22 | - MJRefresh 23 | - Moya 24 | - SnapKit 25 | 26 | SPEC CHECKSUMS: 27 | Alamofire: 2291f7d21ca607c491dd17642e5d40fdcda0e65c 28 | HandyJSON: 9e4e236f5d2dbefad5155a77417bbea438201c03 29 | MJRefresh: 6afc955813966afb08305477dd7a0d9ad5e79a16 30 | Moya: 5b45dacb75adb009f97fde91c204c1e565d31916 31 | SnapKit: 97b92857e3df3a0c71833cce143274bf6ef8e5eb 32 | 33 | PODFILE CHECKSUM: 00c3dc399ab9280e8c22c55c86e08eaefd170385 34 | 35 | COCOAPODS: 1.9.1 36 | -------------------------------------------------------------------------------- /Pods/Alamofire/LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (c) 2014-2020 Alamofire Software Foundation (http://alamofire.org/) 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining a copy 4 | of this software and associated documentation files (the "Software"), to deal 5 | in the Software without restriction, including without limitation the rights 6 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 7 | copies of the Software, and to permit persons to whom the Software is 8 | furnished to do so, subject to the following conditions: 9 | 10 | The above copyright notice and this permission notice shall be included in 11 | all copies or substantial portions of the Software. 12 | 13 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 14 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 15 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 16 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 17 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 18 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 19 | THE SOFTWARE. 20 | -------------------------------------------------------------------------------- /Pods/Alamofire/Source/Alamofire.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Alamofire.swift 3 | // 4 | // Copyright (c) 2014-2018 Alamofire Software Foundation (http://alamofire.org/) 5 | // 6 | // Permission is hereby granted, free of charge, to any person obtaining a copy 7 | // of this software and associated documentation files (the "Software"), to deal 8 | // in the Software without restriction, including without limitation the rights 9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | // copies of the Software, and to permit persons to whom the Software is 11 | // furnished to do so, subject to the following conditions: 12 | // 13 | // The above copyright notice and this permission notice shall be included in 14 | // all copies or substantial portions of the Software. 15 | // 16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 22 | // THE SOFTWARE. 23 | // 24 | 25 | /// Reference to `Session.default` for quick bootstrapping and examples. 26 | public let AF = Session.default 27 | 28 | /// Current Alamofire version. Necessary since SPM doesn't use dynamic libraries. Plus this will be more accurate. 29 | let version = "5.4.1" 30 | -------------------------------------------------------------------------------- /Pods/Alamofire/Source/DispatchQueue+Alamofire.swift: -------------------------------------------------------------------------------- 1 | // 2 | // DispatchQueue+Alamofire.swift 3 | // 4 | // Copyright (c) 2014-2018 Alamofire Software Foundation (http://alamofire.org/) 5 | // 6 | // Permission is hereby granted, free of charge, to any person obtaining a copy 7 | // of this software and associated documentation files (the "Software"), to deal 8 | // in the Software without restriction, including without limitation the rights 9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | // copies of the Software, and to permit persons to whom the Software is 11 | // furnished to do so, subject to the following conditions: 12 | // 13 | // The above copyright notice and this permission notice shall be included in 14 | // all copies or substantial portions of the Software. 15 | // 16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 22 | // THE SOFTWARE. 23 | // 24 | 25 | import Dispatch 26 | import Foundation 27 | 28 | extension DispatchQueue { 29 | /// Execute the provided closure after a `TimeInterval`. 30 | /// 31 | /// - Parameters: 32 | /// - delay: `TimeInterval` to delay execution. 33 | /// - closure: Closure to execute. 34 | func after(_ delay: TimeInterval, execute closure: @escaping () -> Void) { 35 | asyncAfter(deadline: .now() + delay, execute: closure) 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /Pods/Alamofire/Source/URLRequest+Alamofire.swift: -------------------------------------------------------------------------------- 1 | // 2 | // URLRequest+Alamofire.swift 3 | // 4 | // Copyright (c) 2019 Alamofire Software Foundation (http://alamofire.org/) 5 | // 6 | // Permission is hereby granted, free of charge, to any person obtaining a copy 7 | // of this software and associated documentation files (the "Software"), to deal 8 | // in the Software without restriction, including without limitation the rights 9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | // copies of the Software, and to permit persons to whom the Software is 11 | // furnished to do so, subject to the following conditions: 12 | // 13 | // The above copyright notice and this permission notice shall be included in 14 | // all copies or substantial portions of the Software. 15 | // 16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 22 | // THE SOFTWARE. 23 | // 24 | 25 | import Foundation 26 | 27 | extension URLRequest { 28 | /// Returns the `httpMethod` as Alamofire's `HTTPMethod` type. 29 | public var method: HTTPMethod? { 30 | get { httpMethod.flatMap(HTTPMethod.init) } 31 | set { httpMethod = newValue?.rawValue } 32 | } 33 | 34 | public func validate() throws { 35 | if method == .get, let bodyData = httpBody { 36 | throw AFError.urlRequestValidationFailed(reason: .bodyDataInGETRequest(bodyData)) 37 | } 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /Pods/Alamofire/Source/URLSessionConfiguration+Alamofire.swift: -------------------------------------------------------------------------------- 1 | // 2 | // URLSessionConfiguration+Alamofire.swift 3 | // 4 | // Copyright (c) 2014-2018 Alamofire Software Foundation (http://alamofire.org/) 5 | // 6 | // Permission is hereby granted, free of charge, to any person obtaining a copy 7 | // of this software and associated documentation files (the "Software"), to deal 8 | // in the Software without restriction, including without limitation the rights 9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | // copies of the Software, and to permit persons to whom the Software is 11 | // furnished to do so, subject to the following conditions: 12 | // 13 | // The above copyright notice and this permission notice shall be included in 14 | // all copies or substantial portions of the Software. 15 | // 16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 22 | // THE SOFTWARE. 23 | // 24 | 25 | import Foundation 26 | 27 | extension URLSessionConfiguration: AlamofireExtended {} 28 | extension AlamofireExtension where ExtendedType: URLSessionConfiguration { 29 | /// Alamofire's default configuration. Same as `URLSessionConfiguration.default` but adds Alamofire default 30 | /// `Accept-Language`, `Accept-Encoding`, and `User-Agent` headers. 31 | public static var `default`: URLSessionConfiguration { 32 | let configuration = URLSessionConfiguration.default 33 | configuration.headers = .default 34 | 35 | return configuration 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /Pods/HandyJSON/Source/CBridge.swift: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 1999-2101 Alibaba Group. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | // 18 | // CBridge.swift 19 | // HandyJSON 20 | // 21 | // Created by chantu on 2018/7/15. 22 | // Copyright © 2018 aliyun. All rights reserved. 23 | // 24 | 25 | import Foundation 26 | 27 | @_silgen_name("swift_getTypeByMangledNameInContext") 28 | public func _getTypeByMangledNameInContext( 29 | _ name: UnsafePointer, 30 | _ nameLength: Int, 31 | genericContext: UnsafeRawPointer?, 32 | genericArguments: UnsafeRawPointer?) 33 | -> Any.Type? 34 | 35 | 36 | @_silgen_name("swift_getTypeContextDescriptor") 37 | public func _swift_getTypeContextDescriptor(_ metadata: UnsafeRawPointer?) -> UnsafeRawPointer? 38 | -------------------------------------------------------------------------------- /Pods/HandyJSON/Source/Configuration.swift: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 1999-2101 Alibaba Group. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | // 18 | // Configuration.swift 19 | // HandyJSON 20 | // 21 | // Created by zhouzhuo on 08/01/2017. 22 | // 23 | 24 | public struct DeserializeOptions: OptionSet { 25 | public let rawValue: Int 26 | 27 | public static let caseInsensitive = DeserializeOptions(rawValue: 1 << 0) 28 | 29 | public static let defaultOptions: DeserializeOptions = [] 30 | 31 | public init(rawValue: Int) { 32 | self.rawValue = rawValue 33 | } 34 | } 35 | 36 | public enum DebugMode: Int { 37 | case verbose = 0 38 | case debug = 1 39 | case error = 2 40 | case none = 3 41 | } 42 | 43 | public struct HandyJSONConfiguration { 44 | 45 | private static var _mode = DebugMode.error 46 | public static var debugMode: DebugMode { 47 | get { 48 | return _mode 49 | } 50 | set { 51 | _mode = newValue 52 | } 53 | } 54 | 55 | public static var deserializeOptions: DeserializeOptions = .defaultOptions 56 | } 57 | -------------------------------------------------------------------------------- /Pods/HandyJSON/Source/CustomDateFormatTransform.swift: -------------------------------------------------------------------------------- 1 | // 2 | // CustomDateFormatTransform.swift 3 | // ObjectMapper 4 | // 5 | // Created by Dan McCracken on 3/8/15. 6 | // 7 | // The MIT License (MIT) 8 | // 9 | // Copyright (c) 2014-2016 Hearst 10 | // 11 | // Permission is hereby granted, free of charge, to any person obtaining a copy 12 | // of this software and associated documentation files (the "Software"), to deal 13 | // in the Software without restriction, including without limitation the rights 14 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 15 | // copies of the Software, and to permit persons to whom the Software is 16 | // furnished to do so, subject to the following conditions: 17 | // 18 | // The above copyright notice and this permission notice shall be included in 19 | // all copies or substantial portions of the Software. 20 | // 21 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 22 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 23 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 24 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 25 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 26 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 27 | // THE SOFTWARE. 28 | 29 | import Foundation 30 | 31 | open class CustomDateFormatTransform: DateFormatterTransform { 32 | 33 | public init(formatString: String) { 34 | let formatter = DateFormatter() 35 | formatter.locale = Locale(identifier: "en_US_POSIX") 36 | formatter.dateFormat = formatString 37 | 38 | super.init(dateFormatter: formatter) 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /Pods/HandyJSON/Source/DataTransform.swift: -------------------------------------------------------------------------------- 1 | // 2 | // DataTransform.swift 3 | // ObjectMapper 4 | // 5 | // Created by Yagrushkin, Evgeny on 8/30/16. 6 | // 7 | // The MIT License (MIT) 8 | // 9 | // Copyright (c) 2014-2016 Hearst 10 | // 11 | // Permission is hereby granted, free of charge, to any person obtaining a copy 12 | // of this software and associated documentation files (the "Software"), to deal 13 | // in the Software without restriction, including without limitation the rights 14 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 15 | // copies of the Software, and to permit persons to whom the Software is 16 | // furnished to do so, subject to the following conditions: 17 | // 18 | // The above copyright notice and this permission notice shall be included in 19 | // all copies or substantial portions of the Software. 20 | // 21 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 22 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 23 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 24 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 25 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 26 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 27 | // THE SOFTWARE. 28 | 29 | import Foundation 30 | 31 | open class DataTransform: TransformType { 32 | public typealias Object = Data 33 | public typealias JSON = String 34 | 35 | public init() {} 36 | 37 | open func transformFromJSON(_ value: Any?) -> Data? { 38 | guard let string = value as? String else{ 39 | return nil 40 | } 41 | return Data(base64Encoded: string) 42 | } 43 | 44 | open func transformToJSON(_ value: Data?) -> String? { 45 | guard let data = value else{ 46 | return nil 47 | } 48 | return data.base64EncodedString() 49 | } 50 | } 51 | -------------------------------------------------------------------------------- /Pods/HandyJSON/Source/DateTransform.swift: -------------------------------------------------------------------------------- 1 | // 2 | // DateTransform.swift 3 | // ObjectMapper 4 | // 5 | // Created by Tristan Himmelman on 2014-10-13. 6 | // 7 | // The MIT License (MIT) 8 | // 9 | // Copyright (c) 2014-2016 Hearst 10 | // 11 | // Permission is hereby granted, free of charge, to any person obtaining a copy 12 | // of this software and associated documentation files (the "Software"), to deal 13 | // in the Software without restriction, including without limitation the rights 14 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 15 | // copies of the Software, and to permit persons to whom the Software is 16 | // furnished to do so, subject to the following conditions: 17 | // 18 | // The above copyright notice and this permission notice shall be included in 19 | // all copies or substantial portions of the Software. 20 | // 21 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 22 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 23 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 24 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 25 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 26 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 27 | // THE SOFTWARE. 28 | 29 | import Foundation 30 | 31 | open class DateTransform: TransformType { 32 | public typealias Object = Date 33 | public typealias JSON = Double 34 | 35 | public init() {} 36 | 37 | open func transformFromJSON(_ value: Any?) -> Date? { 38 | if let timeInt = value as? Double { 39 | return Date(timeIntervalSince1970: TimeInterval(timeInt)) 40 | } 41 | 42 | if let timeStr = value as? String { 43 | return Date(timeIntervalSince1970: TimeInterval(atof(timeStr))) 44 | } 45 | 46 | return nil 47 | } 48 | 49 | open func transformToJSON(_ value: Date?) -> Double? { 50 | if let date = value { 51 | return Double(date.timeIntervalSince1970) 52 | } 53 | return nil 54 | } 55 | } 56 | -------------------------------------------------------------------------------- /Pods/HandyJSON/Source/EnumTransform.swift: -------------------------------------------------------------------------------- 1 | // 2 | // EnumTransform.swift 3 | // ObjectMapper 4 | // 5 | // Created by Kaan Dedeoglu on 3/20/15. 6 | // 7 | // The MIT License (MIT) 8 | // 9 | // Copyright (c) 2014-2016 Hearst 10 | // 11 | // Permission is hereby granted, free of charge, to any person obtaining a copy 12 | // of this software and associated documentation files (the "Software"), to deal 13 | // in the Software without restriction, including without limitation the rights 14 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 15 | // copies of the Software, and to permit persons to whom the Software is 16 | // furnished to do so, subject to the following conditions: 17 | // 18 | // The above copyright notice and this permission notice shall be included in 19 | // all copies or substantial portions of the Software. 20 | // 21 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 22 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 23 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 24 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 25 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 26 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 27 | // THE SOFTWARE. 28 | 29 | import Foundation 30 | 31 | open class EnumTransform: TransformType { 32 | public typealias Object = T 33 | public typealias JSON = T.RawValue 34 | 35 | public init() {} 36 | 37 | open func transformFromJSON(_ value: Any?) -> T? { 38 | if let raw = value as? T.RawValue { 39 | return T(rawValue: raw) 40 | } 41 | return nil 42 | } 43 | 44 | open func transformToJSON(_ value: T?) -> T.RawValue? { 45 | if let obj = value { 46 | return obj.rawValue 47 | } 48 | return nil 49 | } 50 | } 51 | -------------------------------------------------------------------------------- /Pods/HandyJSON/Source/EnumType.swift: -------------------------------------------------------------------------------- 1 | // 2 | // EnumType.swift 3 | // HandyJSON 4 | // 5 | // Created by zhouzhuo on 16/07/2017. 6 | // Copyright © 2017 aliyun. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | public protocol _RawEnumProtocol: _Transformable { 12 | 13 | static func _transform(from object: Any) -> Self? 14 | func _plainValue() -> Any? 15 | } 16 | 17 | extension RawRepresentable where Self: _RawEnumProtocol { 18 | 19 | public static func _transform(from object: Any) -> Self? { 20 | if let transformableType = RawValue.self as? _Transformable.Type { 21 | if let typedValue = transformableType.transform(from: object) { 22 | return Self(rawValue: typedValue as! RawValue) 23 | } 24 | } 25 | return nil 26 | } 27 | 28 | public func _plainValue() -> Any? { 29 | return self.rawValue 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /Pods/HandyJSON/Source/Export.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Export.swift 3 | // HandyJSON 4 | // 5 | // Created by zhouzhuo on 16/07/2017. 6 | // Copyright © 2017 aliyun. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | public protocol HandyJSONCustomTransformable: _ExtendCustomBasicType {} 12 | 13 | public protocol HandyJSON: _ExtendCustomModelType {} 14 | 15 | public protocol HandyJSONEnum: _RawEnumProtocol {} 16 | -------------------------------------------------------------------------------- /Pods/HandyJSON/Source/ExtendCustomBasicType.swift: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 1999-2101 Alibaba Group. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | // 18 | // ExtendCustomBasicType.swift 19 | // HandyJSON 20 | // 21 | // Created by zhouzhuo on 05/09/2017. 22 | // 23 | 24 | public protocol _ExtendCustomBasicType: _Transformable { 25 | 26 | static func _transform(from object: Any) -> Self? 27 | func _plainValue() -> Any? 28 | } 29 | -------------------------------------------------------------------------------- /Pods/HandyJSON/Source/HandyJSON.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 1999-2101 Alibaba Group. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | // Created by zhouzhuo on 7/11/16. 18 | // 19 | 20 | @import Foundation; 21 | 22 | //! Project version number for HandyJSON. 23 | FOUNDATION_EXPORT double HandyJSONVersionNumber; 24 | 25 | //! Project version string for HandyJSON. 26 | FOUNDATION_EXPORT const unsigned char HandyJSONVersionString[]; 27 | 28 | // In this header, you should import all the public headers of your framework using statements like #import 29 | 30 | 31 | -------------------------------------------------------------------------------- /Pods/HandyJSON/Source/ISO8601DateTransform.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ISO8601DateTransform.swift 3 | // ObjectMapper 4 | // 5 | // Created by Jean-Pierre Mouilleseaux on 21 Nov 2014. 6 | // 7 | // The MIT License (MIT) 8 | // 9 | // Copyright (c) 2014-2016 Hearst 10 | // 11 | // Permission is hereby granted, free of charge, to any person obtaining a copy 12 | // of this software and associated documentation files (the "Software"), to deal 13 | // in the Software without restriction, including without limitation the rights 14 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 15 | // copies of the Software, and to permit persons to whom the Software is 16 | // furnished to do so, subject to the following conditions: 17 | // 18 | // The above copyright notice and this permission notice shall be included in 19 | // all copies or substantial portions of the Software. 20 | // 21 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 22 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 23 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 24 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 25 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 26 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 27 | // THE SOFTWARE. 28 | 29 | import Foundation 30 | 31 | open class ISO8601DateTransform: DateFormatterTransform { 32 | 33 | public init() { 34 | let formatter = DateFormatter() 35 | formatter.locale = Locale(identifier: "en_US_POSIX") 36 | formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssZZZZZ" 37 | 38 | super.init(dateFormatter: formatter) 39 | } 40 | 41 | } 42 | -------------------------------------------------------------------------------- /Pods/HandyJSON/Source/Logger.swift: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 1999-2101 Alibaba Group. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | // 18 | // Logger.swift 19 | // HandyJSON 20 | // 21 | // Created by zhouzhuo on 08/01/2017. 22 | // 23 | 24 | struct InternalLogger { 25 | 26 | static func logError(_ items: Any..., separator: String = " ", terminator: String = "\n") { 27 | if HandyJSONConfiguration.debugMode.rawValue <= DebugMode.error.rawValue { 28 | print(items, separator: separator, terminator: terminator) 29 | } 30 | } 31 | 32 | static func logDebug(_ items: Any..., separator: String = " ", terminator: String = "\n") { 33 | if HandyJSONConfiguration.debugMode.rawValue <= DebugMode.debug.rawValue { 34 | print(items, separator: separator, terminator: terminator) 35 | } 36 | } 37 | 38 | static func logVerbose(_ items: Any..., separator: String = " ", terminator: String = "\n") { 39 | if HandyJSONConfiguration.debugMode.rawValue <= DebugMode.verbose.rawValue { 40 | print(items, separator: separator, terminator: terminator) 41 | } 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /Pods/HandyJSON/Source/MangledName.swift: -------------------------------------------------------------------------------- 1 | // 2 | // MangledName.swift 3 | // HandyJSON 4 | // 5 | // Created by chantu on 2019/2/2. 6 | // Copyright © 2019 aliyun. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | // mangled name might contain 0 but it is not the end, do not just use strlen 12 | func getMangledTypeNameSize(_ mangledName: UnsafePointer) -> Int { 13 | // TODO: should find the actually size 14 | return 256 15 | } 16 | -------------------------------------------------------------------------------- /Pods/HandyJSON/Source/PointerType.swift: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 1999-2101 Alibaba Group. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | // 18 | // Created by zhouzhuo on 07/01/2017. 19 | // 20 | 21 | protocol PointerType : Equatable { 22 | associatedtype Pointee 23 | var pointer: UnsafePointer { get set } 24 | } 25 | 26 | extension PointerType { 27 | init(pointer: UnsafePointer) { 28 | func cast(_ value: T) -> U { 29 | return unsafeBitCast(value, to: U.self) 30 | } 31 | self = cast(UnsafePointer(pointer)) 32 | } 33 | } 34 | 35 | func == (lhs: T, rhs: T) -> Bool { 36 | return lhs.pointer == rhs.pointer 37 | } 38 | -------------------------------------------------------------------------------- /Pods/HandyJSON/Source/PropertyInfo.swift: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 1999-2101 Alibaba Group. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | // 18 | // PropertyInfo.swift 19 | // HandyJSON 20 | // 21 | // Created by zhouzhuo on 20/08/2017. 22 | // 23 | 24 | struct PropertyInfo { 25 | let key: String 26 | let type: Any.Type 27 | let address: UnsafeMutableRawPointer 28 | let bridged: Bool 29 | } 30 | -------------------------------------------------------------------------------- /Pods/HandyJSON/Source/ReflectionHelper.swift: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 1999-2101 Alibaba Group. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | // 18 | // Helper.swift 19 | // HandyJSON 20 | // 21 | // Created by zhouzhuo on 07/01/2017. 22 | // 23 | 24 | struct ReflectionHelper { 25 | 26 | static func mutableStorage(instance: inout T) -> UnsafeMutableRawPointer { 27 | return UnsafeMutableRawPointer(mutating: storage(instance: &instance)) 28 | } 29 | 30 | static func storage(instance: inout T) -> UnsafeRawPointer { 31 | if type(of: instance) is AnyClass { 32 | let opaquePointer = Unmanaged.passUnretained(instance as AnyObject).toOpaque() 33 | return UnsafeRawPointer(opaquePointer) 34 | } else { 35 | return withUnsafePointer(to: &instance) { pointer in 36 | return UnsafeRawPointer(pointer) 37 | } 38 | } 39 | } 40 | } 41 | 42 | 43 | -------------------------------------------------------------------------------- /Pods/HandyJSON/Source/TransformOf.swift: -------------------------------------------------------------------------------- 1 | // 2 | // TransformOf.swift 3 | // ObjectMapper 4 | // 5 | // Created by Syo Ikeda on 1/23/15. 6 | // 7 | // The MIT License (MIT) 8 | // 9 | // Copyright (c) 2014-2016 Hearst 10 | // 11 | // Permission is hereby granted, free of charge, to any person obtaining a copy 12 | // of this software and associated documentation files (the "Software"), to deal 13 | // in the Software without restriction, including without limitation the rights 14 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 15 | // copies of the Software, and to permit persons to whom the Software is 16 | // furnished to do so, subject to the following conditions: 17 | // 18 | // The above copyright notice and this permission notice shall be included in 19 | // all copies or substantial portions of the Software. 20 | // 21 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 22 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 23 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 24 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 25 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 26 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 27 | // THE SOFTWARE. 28 | 29 | open class TransformOf: TransformType { 30 | public typealias Object = ObjectType 31 | public typealias JSON = JSONType 32 | 33 | private let fromJSON: (JSONType?) -> ObjectType? 34 | private let toJSON: (ObjectType?) -> JSONType? 35 | 36 | public init(fromJSON: @escaping(JSONType?) -> ObjectType?, toJSON: @escaping(ObjectType?) -> JSONType?) { 37 | self.fromJSON = fromJSON 38 | self.toJSON = toJSON 39 | } 40 | 41 | open func transformFromJSON(_ value: Any?) -> ObjectType? { 42 | return fromJSON(value as? JSONType) 43 | } 44 | 45 | open func transformToJSON(_ value: ObjectType?) -> JSONType? { 46 | return toJSON(value) 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /Pods/HandyJSON/Source/TransformType.swift: -------------------------------------------------------------------------------- 1 | // 2 | // TransformType.swift 3 | // ObjectMapper 4 | // 5 | // Created by Syo Ikeda on 2/4/15. 6 | // 7 | // The MIT License (MIT) 8 | // 9 | // Copyright (c) 2014-2016 Hearst 10 | // 11 | // Permission is hereby granted, free of charge, to any person obtaining a copy 12 | // of this software and associated documentation files (the "Software"), to deal 13 | // in the Software without restriction, including without limitation the rights 14 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 15 | // copies of the Software, and to permit persons to whom the Software is 16 | // furnished to do so, subject to the following conditions: 17 | // 18 | // The above copyright notice and this permission notice shall be included in 19 | // all copies or substantial portions of the Software. 20 | // 21 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 22 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 23 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 24 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 25 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 26 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 27 | // THE SOFTWARE. 28 | 29 | public protocol TransformType { 30 | associatedtype Object 31 | associatedtype JSON 32 | 33 | func transformFromJSON(_ value: Any?) -> Object? 34 | func transformToJSON(_ value: Object?) -> JSON? 35 | } 36 | -------------------------------------------------------------------------------- /Pods/HandyJSON/Source/Transformable.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Transformable.swift 3 | // HandyJSON 4 | // 5 | // Created by zhouzhuo on 15/07/2017. 6 | // Copyright © 2017 aliyun. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | public protocol _Transformable: _Measurable {} 12 | 13 | extension _Transformable { 14 | 15 | static func transform(from object: Any) -> Self? { 16 | if let typedObject = object as? Self { 17 | return typedObject 18 | } 19 | switch self { 20 | case let type as _ExtendCustomBasicType.Type: 21 | return type._transform(from: object) as? Self 22 | case let type as _BuiltInBridgeType.Type: 23 | return type._transform(from: object) as? Self 24 | case let type as _BuiltInBasicType.Type: 25 | return type._transform(from: object) as? Self 26 | case let type as _RawEnumProtocol.Type: 27 | return type._transform(from: object) as? Self 28 | case let type as _ExtendCustomModelType.Type: 29 | return type._transform(from: object) as? Self 30 | default: 31 | return nil 32 | } 33 | } 34 | 35 | func plainValue() -> Any? { 36 | switch self { 37 | case let rawValue as _ExtendCustomBasicType: 38 | return rawValue._plainValue() 39 | case let rawValue as _BuiltInBridgeType: 40 | return rawValue._plainValue() 41 | case let rawValue as _BuiltInBasicType: 42 | return rawValue._plainValue() 43 | case let rawValue as _RawEnumProtocol: 44 | return rawValue._plainValue() 45 | case let rawValue as _ExtendCustomModelType: 46 | return rawValue._plainValue() 47 | default: 48 | return nil 49 | } 50 | } 51 | } 52 | 53 | -------------------------------------------------------------------------------- /Pods/MJRefresh/LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (c) 2013-2015 MJRefresh (https://github.com/CoderMJLee/MJRefresh) 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining a copy 4 | of this software and associated documentation files (the "Software"), to deal 5 | in the Software without restriction, including without limitation the rights 6 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 7 | copies of the Software, and to permit persons to whom the Software is 8 | furnished to do so, subject to the following conditions: 9 | 10 | The above copyright notice and this permission notice shall be included in 11 | all copies or substantial portions of the Software. 12 | 13 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 14 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 15 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 16 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 17 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 18 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 19 | THE SOFTWARE. 20 | -------------------------------------------------------------------------------- /Pods/MJRefresh/MJRefresh/Base/MJRefreshAutoFooter.h: -------------------------------------------------------------------------------- 1 | // 2 | // MJRefreshAutoFooter.h 3 | // MJRefreshExample 4 | // 5 | // Created by MJ Lee on 15/4/24. 6 | // Copyright (c) 2015年 小码哥. All rights reserved. 7 | // 8 | 9 | #import "MJRefreshFooter.h" 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | @interface MJRefreshAutoFooter : MJRefreshFooter 14 | /** 是否自动刷新(默认为YES) */ 15 | @property (assign, nonatomic, getter=isAutomaticallyRefresh) BOOL automaticallyRefresh; 16 | 17 | /** 当底部控件出现多少时就自动刷新(默认为1.0,也就是底部控件完全出现时,才会自动刷新) */ 18 | @property (assign, nonatomic) CGFloat appearencePercentTriggerAutoRefresh MJRefreshDeprecated("请使用triggerAutomaticallyRefreshPercent属性"); 19 | 20 | /** 当底部控件出现多少时就自动刷新(默认为1.0,也就是底部控件完全出现时,才会自动刷新) */ 21 | @property (assign, nonatomic) CGFloat triggerAutomaticallyRefreshPercent; 22 | 23 | /** 自动触发次数, 默认为 1, 仅在拖拽 ScrollView 时才生效, 24 | 25 | 如果为 -1, 则为无限触发 26 | */ 27 | @property (nonatomic) NSInteger autoTriggerTimes; 28 | @end 29 | 30 | NS_ASSUME_NONNULL_END 31 | -------------------------------------------------------------------------------- /Pods/MJRefresh/MJRefresh/Base/MJRefreshBackFooter.h: -------------------------------------------------------------------------------- 1 | // 2 | // MJRefreshBackFooter.h 3 | // MJRefreshExample 4 | // 5 | // Created by MJ Lee on 15/4/24. 6 | // Copyright (c) 2015年 小码哥. All rights reserved. 7 | // 8 | 9 | #import "MJRefreshFooter.h" 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | @interface MJRefreshBackFooter : MJRefreshFooter 14 | 15 | @end 16 | 17 | NS_ASSUME_NONNULL_END 18 | -------------------------------------------------------------------------------- /Pods/MJRefresh/MJRefresh/Base/MJRefreshFooter.h: -------------------------------------------------------------------------------- 1 | // 代码地址: https://github.com/CoderMJLee/MJRefresh 2 | // 代码地址: http://code4app.com/ios/%E5%BF%AB%E9%80%9F%E9%9B%86%E6%88%90%E4%B8%8B%E6%8B%89%E4%B8%8A%E6%8B%89%E5%88%B7%E6%96%B0/52326ce26803fabc46000000 3 | // MJRefreshFooter.h 4 | // MJRefreshExample 5 | // 6 | // Created by MJ Lee on 15/3/5. 7 | // Copyright (c) 2015年 小码哥. All rights reserved. 8 | // 上拉刷新控件 9 | 10 | #import "MJRefreshComponent.h" 11 | 12 | NS_ASSUME_NONNULL_BEGIN 13 | 14 | @interface MJRefreshFooter : MJRefreshComponent 15 | /** 创建footer */ 16 | + (instancetype)footerWithRefreshingBlock:(MJRefreshComponentAction)refreshingBlock; 17 | /** 创建footer */ 18 | + (instancetype)footerWithRefreshingTarget:(id)target refreshingAction:(SEL)action; 19 | 20 | /** 提示没有更多的数据 */ 21 | - (void)endRefreshingWithNoMoreData; 22 | - (void)noticeNoMoreData MJRefreshDeprecated("使用endRefreshingWithNoMoreData"); 23 | 24 | /** 重置没有更多的数据(消除没有更多数据的状态) */ 25 | - (void)resetNoMoreData; 26 | 27 | /** 忽略多少scrollView的contentInset的bottom */ 28 | @property (assign, nonatomic) CGFloat ignoredScrollViewContentInsetBottom; 29 | 30 | /** 自动根据有无数据来显示和隐藏(有数据就显示,没有数据隐藏。默认是NO) */ 31 | @property (assign, nonatomic, getter=isAutomaticallyHidden) BOOL automaticallyHidden MJRefreshDeprecated("已废弃此属性,开发者请自行控制footer的显示和隐藏"); 32 | @end 33 | 34 | NS_ASSUME_NONNULL_END 35 | -------------------------------------------------------------------------------- /Pods/MJRefresh/MJRefresh/Base/MJRefreshFooter.m: -------------------------------------------------------------------------------- 1 | // 代码地址: https://github.com/CoderMJLee/MJRefresh 2 | // 代码地址: http://code4app.com/ios/%E5%BF%AB%E9%80%9F%E9%9B%86%E6%88%90%E4%B8%8B%E6%8B%89%E4%B8%8A%E6%8B%89%E5%88%B7%E6%96%B0/52326ce26803fabc46000000 3 | // MJRefreshFooter.m 4 | // MJRefreshExample 5 | // 6 | // Created by MJ Lee on 15/3/5. 7 | // Copyright (c) 2015年 小码哥. All rights reserved. 8 | // 9 | 10 | #import "MJRefreshFooter.h" 11 | #include "UIScrollView+MJRefresh.h" 12 | 13 | @interface MJRefreshFooter() 14 | 15 | @end 16 | 17 | @implementation MJRefreshFooter 18 | #pragma mark - 构造方法 19 | + (instancetype)footerWithRefreshingBlock:(MJRefreshComponentAction)refreshingBlock 20 | { 21 | MJRefreshFooter *cmp = [[self alloc] init]; 22 | cmp.refreshingBlock = refreshingBlock; 23 | return cmp; 24 | } 25 | + (instancetype)footerWithRefreshingTarget:(id)target refreshingAction:(SEL)action 26 | { 27 | MJRefreshFooter *cmp = [[self alloc] init]; 28 | [cmp setRefreshingTarget:target refreshingAction:action]; 29 | return cmp; 30 | } 31 | 32 | #pragma mark - 重写父类的方法 33 | - (void)prepare 34 | { 35 | [super prepare]; 36 | 37 | // 设置自己的高度 38 | self.mj_h = MJRefreshFooterHeight; 39 | 40 | // 默认不会自动隐藏 41 | // self.automaticallyHidden = NO; 42 | } 43 | 44 | #pragma mark - 公共方法 45 | - (void)endRefreshingWithNoMoreData 46 | { 47 | MJRefreshDispatchAsyncOnMainQueue(self.state = MJRefreshStateNoMoreData;) 48 | } 49 | 50 | - (void)noticeNoMoreData 51 | { 52 | [self endRefreshingWithNoMoreData]; 53 | } 54 | 55 | - (void)resetNoMoreData 56 | { 57 | MJRefreshDispatchAsyncOnMainQueue(self.state = MJRefreshStateIdle;) 58 | } 59 | 60 | - (void)setAutomaticallyHidden:(BOOL)automaticallyHidden 61 | { 62 | _automaticallyHidden = automaticallyHidden; 63 | } 64 | @end 65 | -------------------------------------------------------------------------------- /Pods/MJRefresh/MJRefresh/Base/MJRefreshHeader.h: -------------------------------------------------------------------------------- 1 | // 代码地址: https://github.com/CoderMJLee/MJRefresh 2 | // 代码地址: http://code4app.com/ios/%E5%BF%AB%E9%80%9F%E9%9B%86%E6%88%90%E4%B8%8B%E6%8B%89%E4%B8%8A%E6%8B%89%E5%88%B7%E6%96%B0/52326ce26803fabc46000000 3 | // MJRefreshHeader.h 4 | // MJRefreshExample 5 | // 6 | // Created by MJ Lee on 15/3/4. 7 | // Copyright (c) 2015年 小码哥. All rights reserved. 8 | // 下拉刷新控件:负责监控用户下拉的状态 9 | 10 | #import "MJRefreshComponent.h" 11 | 12 | NS_ASSUME_NONNULL_BEGIN 13 | 14 | @interface MJRefreshHeader : MJRefreshComponent 15 | /** 创建header */ 16 | + (instancetype)headerWithRefreshingBlock:(MJRefreshComponentAction)refreshingBlock; 17 | /** 创建header */ 18 | + (instancetype)headerWithRefreshingTarget:(id)target refreshingAction:(SEL)action; 19 | 20 | /** 这个key用来存储上一次下拉刷新成功的时间 */ 21 | @property (copy, nonatomic) NSString *lastUpdatedTimeKey; 22 | /** 上一次下拉刷新成功的时间 */ 23 | @property (strong, nonatomic, readonly, nullable) NSDate *lastUpdatedTime; 24 | 25 | /** 忽略多少scrollView的contentInset的top */ 26 | @property (assign, nonatomic) CGFloat ignoredScrollViewContentInsetTop; 27 | 28 | /** 默认是关闭状态, 如果遇到 CollectionView 的动画异常问题可以尝试打开 */ 29 | @property (nonatomic) BOOL isCollectionViewAnimationBug; 30 | @end 31 | 32 | NS_ASSUME_NONNULL_END 33 | -------------------------------------------------------------------------------- /Pods/MJRefresh/MJRefresh/Base/MJRefreshTrailer.h: -------------------------------------------------------------------------------- 1 | // 2 | // MJRefreshTrailer.h 3 | // MJRefresh 4 | // 5 | // Created by kinarobin on 2020/5/3. 6 | // Copyright © 2020 小码哥. All rights reserved. 7 | // 8 | 9 | #import "MJRefreshComponent.h" 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | @interface MJRefreshTrailer : MJRefreshComponent 14 | 15 | /** 创建trailer*/ 16 | + (instancetype)trailerWithRefreshingBlock:(MJRefreshComponentAction)refreshingBlock; 17 | /** 创建trailer */ 18 | + (instancetype)trailerWithRefreshingTarget:(id)target refreshingAction:(SEL)action; 19 | 20 | /** 忽略多少scrollView的contentInset的right */ 21 | @property (assign, nonatomic) CGFloat ignoredScrollViewContentInsetRight; 22 | 23 | 24 | @end 25 | 26 | NS_ASSUME_NONNULL_END 27 | -------------------------------------------------------------------------------- /Pods/MJRefresh/MJRefresh/Custom/Footer/Auto/MJRefreshAutoGifFooter.h: -------------------------------------------------------------------------------- 1 | // 2 | // MJRefreshAutoGifFooter.h 3 | // MJRefreshExample 4 | // 5 | // Created by MJ Lee on 15/4/24. 6 | // Copyright (c) 2015年 小码哥. All rights reserved. 7 | // 8 | 9 | #import "MJRefreshAutoStateFooter.h" 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | @interface MJRefreshAutoGifFooter : MJRefreshAutoStateFooter 14 | @property (weak, nonatomic, readonly) UIImageView *gifView; 15 | 16 | /** 设置state状态下的动画图片images 动画持续时间duration*/ 17 | - (void)setImages:(NSArray *)images duration:(NSTimeInterval)duration forState:(MJRefreshState)state; 18 | - (void)setImages:(NSArray *)images forState:(MJRefreshState)state; 19 | @end 20 | 21 | NS_ASSUME_NONNULL_END 22 | -------------------------------------------------------------------------------- /Pods/MJRefresh/MJRefresh/Custom/Footer/Auto/MJRefreshAutoNormalFooter.h: -------------------------------------------------------------------------------- 1 | // 2 | // MJRefreshAutoNormalFooter.h 3 | // MJRefreshExample 4 | // 5 | // Created by MJ Lee on 15/4/24. 6 | // Copyright (c) 2015年 小码哥. All rights reserved. 7 | // 8 | 9 | #import "MJRefreshAutoStateFooter.h" 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | @interface MJRefreshAutoNormalFooter : MJRefreshAutoStateFooter 14 | @property (weak, nonatomic, readonly) UIActivityIndicatorView *loadingView; 15 | 16 | /** 菊花的样式 */ 17 | @property (assign, nonatomic) UIActivityIndicatorViewStyle activityIndicatorViewStyle MJRefreshDeprecated("first deprecated in 3.2.2 - Use `loadingView` property"); 18 | @end 19 | 20 | 21 | NS_ASSUME_NONNULL_END 22 | -------------------------------------------------------------------------------- /Pods/MJRefresh/MJRefresh/Custom/Footer/Auto/MJRefreshAutoStateFooter.h: -------------------------------------------------------------------------------- 1 | // 2 | // MJRefreshAutoStateFooter.h 3 | // MJRefreshExample 4 | // 5 | // Created by MJ Lee on 15/6/13. 6 | // Copyright © 2015年 小码哥. All rights reserved. 7 | // 8 | 9 | #import "MJRefreshAutoFooter.h" 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | @interface MJRefreshAutoStateFooter : MJRefreshAutoFooter 14 | /** 文字距离圈圈、箭头的距离 */ 15 | @property (assign, nonatomic) CGFloat labelLeftInset; 16 | /** 显示刷新状态的label */ 17 | @property (weak, nonatomic, readonly) UILabel *stateLabel; 18 | 19 | /** 设置state状态下的文字 */ 20 | - (void)setTitle:(NSString *)title forState:(MJRefreshState)state; 21 | 22 | /** 隐藏刷新状态的文字 */ 23 | @property (assign, nonatomic, getter=isRefreshingTitleHidden) BOOL refreshingTitleHidden; 24 | @end 25 | 26 | NS_ASSUME_NONNULL_END 27 | -------------------------------------------------------------------------------- /Pods/MJRefresh/MJRefresh/Custom/Footer/Back/MJRefreshBackGifFooter.h: -------------------------------------------------------------------------------- 1 | // 2 | // MJRefreshBackGifFooter.h 3 | // MJRefreshExample 4 | // 5 | // Created by MJ Lee on 15/4/24. 6 | // Copyright (c) 2015年 小码哥. All rights reserved. 7 | // 8 | 9 | #import "MJRefreshBackStateFooter.h" 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | @interface MJRefreshBackGifFooter : MJRefreshBackStateFooter 14 | @property (weak, nonatomic, readonly) UIImageView *gifView; 15 | 16 | /** 设置state状态下的动画图片images 动画持续时间duration*/ 17 | - (void)setImages:(NSArray *)images duration:(NSTimeInterval)duration forState:(MJRefreshState)state; 18 | - (void)setImages:(NSArray *)images forState:(MJRefreshState)state; 19 | @end 20 | 21 | NS_ASSUME_NONNULL_END 22 | -------------------------------------------------------------------------------- /Pods/MJRefresh/MJRefresh/Custom/Footer/Back/MJRefreshBackNormalFooter.h: -------------------------------------------------------------------------------- 1 | // 2 | // MJRefreshBackNormalFooter.h 3 | // MJRefreshExample 4 | // 5 | // Created by MJ Lee on 15/4/24. 6 | // Copyright (c) 2015年 小码哥. All rights reserved. 7 | // 8 | 9 | #import "MJRefreshBackStateFooter.h" 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | @interface MJRefreshBackNormalFooter : MJRefreshBackStateFooter 14 | @property (weak, nonatomic, readonly) UIImageView *arrowView; 15 | @property (weak, nonatomic, readonly) UIActivityIndicatorView *loadingView; 16 | 17 | /** 菊花的样式 */ 18 | @property (assign, nonatomic) UIActivityIndicatorViewStyle activityIndicatorViewStyle MJRefreshDeprecated("first deprecated in 3.2.2 - Use `loadingView` property"); 19 | @end 20 | 21 | NS_ASSUME_NONNULL_END 22 | -------------------------------------------------------------------------------- /Pods/MJRefresh/MJRefresh/Custom/Footer/Back/MJRefreshBackStateFooter.h: -------------------------------------------------------------------------------- 1 | // 2 | // MJRefreshBackStateFooter.h 3 | // MJRefreshExample 4 | // 5 | // Created by MJ Lee on 15/6/13. 6 | // Copyright © 2015年 小码哥. All rights reserved. 7 | // 8 | 9 | #import "MJRefreshBackFooter.h" 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | @interface MJRefreshBackStateFooter : MJRefreshBackFooter 14 | /** 文字距离圈圈、箭头的距离 */ 15 | @property (assign, nonatomic) CGFloat labelLeftInset; 16 | /** 显示刷新状态的label */ 17 | @property (weak, nonatomic, readonly) UILabel *stateLabel; 18 | /** 设置state状态下的文字 */ 19 | - (void)setTitle:(NSString *)title forState:(MJRefreshState)state; 20 | 21 | /** 获取state状态下的title */ 22 | - (NSString *)titleForState:(MJRefreshState)state; 23 | @end 24 | 25 | NS_ASSUME_NONNULL_END 26 | -------------------------------------------------------------------------------- /Pods/MJRefresh/MJRefresh/Custom/Header/MJRefreshGifHeader.h: -------------------------------------------------------------------------------- 1 | // 2 | // MJRefreshGifHeader.h 3 | // MJRefreshExample 4 | // 5 | // Created by MJ Lee on 15/4/24. 6 | // Copyright (c) 2015年 小码哥. All rights reserved. 7 | // 8 | 9 | #import "MJRefreshStateHeader.h" 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | @interface MJRefreshGifHeader : MJRefreshStateHeader 14 | @property (weak, nonatomic, readonly) UIImageView *gifView; 15 | 16 | /** 设置state状态下的动画图片images 动画持续时间duration*/ 17 | - (void)setImages:(NSArray *)images duration:(NSTimeInterval)duration forState:(MJRefreshState)state; 18 | - (void)setImages:(NSArray *)images forState:(MJRefreshState)state; 19 | @end 20 | 21 | NS_ASSUME_NONNULL_END 22 | -------------------------------------------------------------------------------- /Pods/MJRefresh/MJRefresh/Custom/Header/MJRefreshNormalHeader.h: -------------------------------------------------------------------------------- 1 | // 2 | // MJRefreshNormalHeader.h 3 | // MJRefreshExample 4 | // 5 | // Created by MJ Lee on 15/4/24. 6 | // Copyright (c) 2015年 小码哥. All rights reserved. 7 | // 8 | 9 | #import "MJRefreshStateHeader.h" 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | @interface MJRefreshNormalHeader : MJRefreshStateHeader 14 | @property (weak, nonatomic, readonly) UIImageView *arrowView; 15 | @property (weak, nonatomic, readonly) UIActivityIndicatorView *loadingView; 16 | 17 | 18 | /** 菊花的样式 */ 19 | @property (assign, nonatomic) UIActivityIndicatorViewStyle activityIndicatorViewStyle MJRefreshDeprecated("first deprecated in 3.2.2 - Use `loadingView` property"); 20 | @end 21 | 22 | NS_ASSUME_NONNULL_END 23 | -------------------------------------------------------------------------------- /Pods/MJRefresh/MJRefresh/Custom/Header/MJRefreshStateHeader.h: -------------------------------------------------------------------------------- 1 | // 2 | // MJRefreshStateHeader.h 3 | // MJRefreshExample 4 | // 5 | // Created by MJ Lee on 15/4/24. 6 | // Copyright (c) 2015年 小码哥. All rights reserved. 7 | // 8 | 9 | #import "MJRefreshHeader.h" 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | @interface MJRefreshStateHeader : MJRefreshHeader 14 | #pragma mark - 刷新时间相关 15 | /** 利用这个block来决定显示的更新时间文字 */ 16 | @property (copy, nonatomic, nullable) NSString *(^lastUpdatedTimeText)(NSDate * _Nullable lastUpdatedTime); 17 | /** 显示上一次刷新时间的label */ 18 | @property (weak, nonatomic, readonly) UILabel *lastUpdatedTimeLabel; 19 | 20 | #pragma mark - 状态相关 21 | /** 文字距离圈圈、箭头的距离 */ 22 | @property (assign, nonatomic) CGFloat labelLeftInset; 23 | /** 显示刷新状态的label */ 24 | @property (weak, nonatomic, readonly) UILabel *stateLabel; 25 | /** 设置state状态下的文字 */ 26 | - (void)setTitle:(NSString *)title forState:(MJRefreshState)state; 27 | @end 28 | 29 | NS_ASSUME_NONNULL_END 30 | -------------------------------------------------------------------------------- /Pods/MJRefresh/MJRefresh/Custom/Trailer/MJRefreshNormalTrailer.h: -------------------------------------------------------------------------------- 1 | // 2 | // MJRefreshNormalTrailer.h 3 | // MJRefreshExample 4 | // 5 | // Created by kinarobin on 2020/5/3. 6 | // Copyright © 2020 小码哥. All rights reserved. 7 | // 8 | 9 | #import "MJRefreshStateTrailer.h" 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | @interface MJRefreshNormalTrailer : MJRefreshStateTrailer 14 | 15 | @property (weak, nonatomic, readonly) UIImageView *arrowView; 16 | 17 | @end 18 | 19 | NS_ASSUME_NONNULL_END 20 | -------------------------------------------------------------------------------- /Pods/MJRefresh/MJRefresh/Custom/Trailer/MJRefreshStateTrailer.h: -------------------------------------------------------------------------------- 1 | // 2 | // MJRefreshStateTrailer.h 3 | // MJRefreshExample 4 | // 5 | // Created by kinarobin on 2020/5/3. 6 | // Copyright © 2020 小码哥. All rights reserved. 7 | // 8 | 9 | #import "MJRefreshTrailer.h" 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | 14 | @interface MJRefreshStateTrailer : MJRefreshTrailer 15 | 16 | #pragma mark - 状态相关 17 | /** 显示刷新状态的label */ 18 | @property (weak, nonatomic, readonly) UILabel *stateLabel; 19 | /** 设置state状态下的文字 */ 20 | - (void)setTitle:(NSString *)title forState:(MJRefreshState)state; 21 | 22 | @end 23 | 24 | NS_ASSUME_NONNULL_END 25 | -------------------------------------------------------------------------------- /Pods/MJRefresh/MJRefresh/MJRefresh.bundle/arrow@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/developRen/Shop/20237b60e26ce78fb2c622ab285b886402fa2bb6/Pods/MJRefresh/MJRefresh/MJRefresh.bundle/arrow@2x.png -------------------------------------------------------------------------------- /Pods/MJRefresh/MJRefresh/MJRefresh.bundle/en.lproj/Localizable.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/developRen/Shop/20237b60e26ce78fb2c622ab285b886402fa2bb6/Pods/MJRefresh/MJRefresh/MJRefresh.bundle/en.lproj/Localizable.strings -------------------------------------------------------------------------------- /Pods/MJRefresh/MJRefresh/MJRefresh.bundle/ko.lproj/Localizable.strings: -------------------------------------------------------------------------------- 1 | "MJRefreshHeaderIdleText" = "아래로 당겨 새로고침"; 2 | "MJRefreshHeaderPullingText" = "놓으면 새로고침"; 3 | "MJRefreshHeaderRefreshingText" = "로딩중..."; 4 | 5 | "MJRefreshAutoFooterIdleText" = "탭 또는 위로 당겨 로드함"; 6 | "MJRefreshAutoFooterRefreshingText" = "로딩중..."; 7 | "MJRefreshAutoFooterNoMoreDataText" = "더이상 데이터 없음"; 8 | 9 | "MJRefreshBackFooterIdleText" = "위로 당겨 더 로드 가능"; 10 | "MJRefreshBackFooterPullingText" = "놓으면 더 로드됨."; 11 | "MJRefreshBackFooterRefreshingText" = "로딩중..."; 12 | "MJRefreshBackFooterNoMoreDataText" = "더이상 데이터 없음"; 13 | 14 | "MJRefreshHeaderLastTimeText" = "마지막 업데이트: "; 15 | "MJRefreshHeaderDateTodayText" = "오늘"; 16 | "MJRefreshHeaderNoneLastDateText" = "기록 없음"; 17 | -------------------------------------------------------------------------------- /Pods/MJRefresh/MJRefresh/MJRefresh.bundle/ru.lproj/Localizable.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/developRen/Shop/20237b60e26ce78fb2c622ab285b886402fa2bb6/Pods/MJRefresh/MJRefresh/MJRefresh.bundle/ru.lproj/Localizable.strings -------------------------------------------------------------------------------- /Pods/MJRefresh/MJRefresh/MJRefresh.bundle/trail_arrow@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/developRen/Shop/20237b60e26ce78fb2c622ab285b886402fa2bb6/Pods/MJRefresh/MJRefresh/MJRefresh.bundle/trail_arrow@2x.png -------------------------------------------------------------------------------- /Pods/MJRefresh/MJRefresh/MJRefresh.bundle/uk.lproj/Localizable.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/developRen/Shop/20237b60e26ce78fb2c622ab285b886402fa2bb6/Pods/MJRefresh/MJRefresh/MJRefresh.bundle/uk.lproj/Localizable.strings -------------------------------------------------------------------------------- /Pods/MJRefresh/MJRefresh/MJRefresh.bundle/zh-Hans.lproj/Localizable.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/developRen/Shop/20237b60e26ce78fb2c622ab285b886402fa2bb6/Pods/MJRefresh/MJRefresh/MJRefresh.bundle/zh-Hans.lproj/Localizable.strings -------------------------------------------------------------------------------- /Pods/MJRefresh/MJRefresh/MJRefresh.bundle/zh-Hant.lproj/Localizable.strings: -------------------------------------------------------------------------------- 1 | "MJRefreshHeaderIdleText" = "下拉可以刷新"; 2 | "MJRefreshHeaderPullingText" = "鬆開立即刷新"; 3 | "MJRefreshHeaderRefreshingText" = "正在刷新數據中..."; 4 | 5 | "MJRefreshTrailerIdleText" = "滑動查看圖文詳情"; 6 | "MJRefreshTrailerPullingText" = "釋放查看圖文詳情"; 7 | 8 | "MJRefreshAutoFooterIdleText" = "點擊或上拉加載更多"; 9 | "MJRefreshAutoFooterRefreshingText" = "正在加載更多的數據..."; 10 | "MJRefreshAutoFooterNoMoreDataText" = "已經全部加載完畢"; 11 | 12 | "MJRefreshBackFooterIdleText" = "上拉可以加載更多"; 13 | "MJRefreshBackFooterPullingText" = "鬆開立即加載更多"; 14 | "MJRefreshBackFooterRefreshingText" = "正在加載更多的數據..."; 15 | "MJRefreshBackFooterNoMoreDataText" = "已經全部加載完畢"; 16 | 17 | "MJRefreshHeaderLastTimeText" = "最後更新:"; 18 | "MJRefreshHeaderDateTodayText" = "今天"; 19 | "MJRefreshHeaderNoneLastDateText" = "無記錄"; 20 | -------------------------------------------------------------------------------- /Pods/MJRefresh/MJRefresh/MJRefresh.h: -------------------------------------------------------------------------------- 1 | // 代码地址: https://github.com/CoderMJLee/MJRefresh 2 | // 代码地址: http://code4app.com/ios/%E5%BF%AB%E9%80%9F%E9%9B%86%E6%88%90%E4%B8%8B%E6%8B%89%E4%B8%8A%E6%8B%89%E5%88%B7%E6%96%B0/52326ce26803fabc46000000 3 | 4 | #import "UIScrollView+MJRefresh.h" 5 | #import "UIScrollView+MJExtension.h" 6 | #import "UIView+MJExtension.h" 7 | 8 | #import "MJRefreshNormalHeader.h" 9 | #import "MJRefreshGifHeader.h" 10 | 11 | #import "MJRefreshBackNormalFooter.h" 12 | #import "MJRefreshBackGifFooter.h" 13 | #import "MJRefreshAutoNormalFooter.h" 14 | #import "MJRefreshAutoGifFooter.h" 15 | 16 | #import "MJRefreshNormalTrailer.h" 17 | -------------------------------------------------------------------------------- /Pods/MJRefresh/MJRefresh/MJRefreshConfig.h: -------------------------------------------------------------------------------- 1 | // 2 | // MJRefreshConfig.h 3 | // 4 | // Created by Frank on 2018/11/27. 5 | // Copyright © 2018 小码哥. All rights reserved. 6 | // 7 | 8 | #import 9 | 10 | NS_ASSUME_NONNULL_BEGIN 11 | 12 | @interface MJRefreshConfig : NSObject 13 | 14 | /** 默认使用的语言版本, 默认为 nil. 将随系统的语言自动改变 */ 15 | @property (copy, nonatomic, nullable) NSString *languageCode; 16 | 17 | /** @return Singleton Config instance */ 18 | + (instancetype)defaultConfig; 19 | 20 | - (instancetype)init NS_UNAVAILABLE; 21 | + (instancetype)new NS_UNAVAILABLE; 22 | 23 | @end 24 | 25 | NS_ASSUME_NONNULL_END 26 | -------------------------------------------------------------------------------- /Pods/MJRefresh/MJRefresh/MJRefreshConfig.m: -------------------------------------------------------------------------------- 1 | // 2 | // MJRefreshConfig.m 3 | // 4 | // Created by Frank on 2018/11/27. 5 | // Copyright © 2018 小码哥. All rights reserved. 6 | // 7 | 8 | #import "MJRefreshConfig.h" 9 | 10 | @implementation MJRefreshConfig 11 | 12 | static MJRefreshConfig *mj_RefreshConfig = nil; 13 | 14 | + (instancetype)defaultConfig { 15 | static dispatch_once_t onceToken; 16 | dispatch_once(&onceToken, ^{ 17 | mj_RefreshConfig = [[self alloc] init]; 18 | }); 19 | return mj_RefreshConfig; 20 | } 21 | 22 | 23 | 24 | @end 25 | -------------------------------------------------------------------------------- /Pods/MJRefresh/MJRefresh/NSBundle+MJRefresh.h: -------------------------------------------------------------------------------- 1 | // 2 | // NSBundle+MJRefresh.h 3 | // MJRefreshExample 4 | // 5 | // Created by MJ Lee on 16/6/13. 6 | // Copyright © 2016年 小码哥. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | @interface NSBundle (MJRefresh) 14 | + (instancetype)mj_refreshBundle; 15 | + (UIImage *)mj_arrowImage; 16 | + (UIImage *)mj_trailArrowImage; 17 | + (NSString *)mj_localizedStringForKey:(NSString *)key value:(nullable NSString *)value; 18 | + (NSString *)mj_localizedStringForKey:(NSString *)key; 19 | @end 20 | 21 | NS_ASSUME_NONNULL_END 22 | -------------------------------------------------------------------------------- /Pods/MJRefresh/MJRefresh/UIScrollView+MJExtension.h: -------------------------------------------------------------------------------- 1 | // 代码地址: https://github.com/CoderMJLee/MJRefresh 2 | // 代码地址: http://code4app.com/ios/%E5%BF%AB%E9%80%9F%E9%9B%86%E6%88%90%E4%B8%8B%E6%8B%89%E4%B8%8A%E6%8B%89%E5%88%B7%E6%96%B0/52326ce26803fabc46000000 3 | // UIScrollView+Extension.h 4 | // MJRefreshExample 5 | // 6 | // Created by MJ Lee on 14-5-28. 7 | // Copyright (c) 2014年 小码哥. All rights reserved. 8 | // 9 | 10 | #import 11 | 12 | NS_ASSUME_NONNULL_BEGIN 13 | 14 | @interface UIScrollView (MJExtension) 15 | @property (readonly, nonatomic) UIEdgeInsets mj_inset; 16 | 17 | @property (assign, nonatomic) CGFloat mj_insetT; 18 | @property (assign, nonatomic) CGFloat mj_insetB; 19 | @property (assign, nonatomic) CGFloat mj_insetL; 20 | @property (assign, nonatomic) CGFloat mj_insetR; 21 | 22 | @property (assign, nonatomic) CGFloat mj_offsetX; 23 | @property (assign, nonatomic) CGFloat mj_offsetY; 24 | 25 | @property (assign, nonatomic) CGFloat mj_contentW; 26 | @property (assign, nonatomic) CGFloat mj_contentH; 27 | @end 28 | 29 | NS_ASSUME_NONNULL_END 30 | -------------------------------------------------------------------------------- /Pods/MJRefresh/MJRefresh/UIScrollView+MJRefresh.h: -------------------------------------------------------------------------------- 1 | // 代码地址: https://github.com/CoderMJLee/MJRefresh 2 | // 代码地址: http://code4app.com/ios/%E5%BF%AB%E9%80%9F%E9%9B%86%E6%88%90%E4%B8%8B%E6%8B%89%E4%B8%8A%E6%8B%89%E5%88%B7%E6%96%B0/52326ce26803fabc46000000 3 | // UIScrollView+MJRefresh.h 4 | // MJRefreshExample 5 | // 6 | // Created by MJ Lee on 15/3/4. 7 | // Copyright (c) 2015年 小码哥. All rights reserved. 8 | // 给ScrollView增加下拉刷新、上拉刷新、 左滑刷新的功能 9 | 10 | #import 11 | #import "MJRefreshConst.h" 12 | 13 | @class MJRefreshHeader, MJRefreshFooter, MJRefreshTrailer; 14 | 15 | NS_ASSUME_NONNULL_BEGIN 16 | 17 | @interface UIScrollView (MJRefresh) 18 | /** 下拉刷新控件 */ 19 | @property (strong, nonatomic, nullable) MJRefreshHeader *mj_header; 20 | @property (strong, nonatomic, nullable) MJRefreshHeader *header MJRefreshDeprecated("使用mj_header"); 21 | /** 上拉刷新控件 */ 22 | @property (strong, nonatomic, nullable) MJRefreshFooter *mj_footer; 23 | @property (strong, nonatomic, nullable) MJRefreshFooter *footer MJRefreshDeprecated("使用mj_footer"); 24 | 25 | /** 左滑刷新控件 */ 26 | @property (strong, nonatomic, nullable) MJRefreshTrailer *mj_trailer; 27 | 28 | #pragma mark - other 29 | - (NSInteger)mj_totalDataCount; 30 | 31 | @end 32 | 33 | NS_ASSUME_NONNULL_END 34 | -------------------------------------------------------------------------------- /Pods/MJRefresh/MJRefresh/UIView+MJExtension.h: -------------------------------------------------------------------------------- 1 | // 代码地址: https://github.com/CoderMJLee/MJRefresh 2 | // 代码地址: http://code4app.com/ios/%E5%BF%AB%E9%80%9F%E9%9B%86%E6%88%90%E4%B8%8B%E6%8B%89%E4%B8%8A%E6%8B%89%E5%88%B7%E6%96%B0/52326ce26803fabc46000000 3 | // UIView+Extension.h 4 | // MJRefreshExample 5 | // 6 | // Created by MJ Lee on 14-5-28. 7 | // Copyright (c) 2014年 小码哥. All rights reserved. 8 | // 9 | 10 | #import 11 | 12 | NS_ASSUME_NONNULL_BEGIN 13 | 14 | @interface UIView (MJExtension) 15 | @property (assign, nonatomic) CGFloat mj_x; 16 | @property (assign, nonatomic) CGFloat mj_y; 17 | @property (assign, nonatomic) CGFloat mj_w; 18 | @property (assign, nonatomic) CGFloat mj_h; 19 | @property (assign, nonatomic) CGSize mj_size; 20 | @property (assign, nonatomic) CGPoint mj_origin; 21 | @end 22 | 23 | NS_ASSUME_NONNULL_END 24 | -------------------------------------------------------------------------------- /Pods/MJRefresh/MJRefresh/UIView+MJExtension.m: -------------------------------------------------------------------------------- 1 | // 代码地址: https://github.com/CoderMJLee/MJRefresh 2 | // 代码地址: http://code4app.com/ios/%E5%BF%AB%E9%80%9F%E9%9B%86%E6%88%90%E4%B8%8B%E6%8B%89%E4%B8%8A%E6%8B%89%E5%88%B7%E6%96%B0/52326ce26803fabc46000000 3 | // UIView+Extension.m 4 | // MJRefreshExample 5 | // 6 | // Created by MJ Lee on 14-5-28. 7 | // Copyright (c) 2014年 小码哥. All rights reserved. 8 | // 9 | 10 | #import "UIView+MJExtension.h" 11 | 12 | @implementation UIView (MJExtension) 13 | - (void)setMj_x:(CGFloat)mj_x 14 | { 15 | CGRect frame = self.frame; 16 | frame.origin.x = mj_x; 17 | self.frame = frame; 18 | } 19 | 20 | - (CGFloat)mj_x 21 | { 22 | return self.frame.origin.x; 23 | } 24 | 25 | - (void)setMj_y:(CGFloat)mj_y 26 | { 27 | CGRect frame = self.frame; 28 | frame.origin.y = mj_y; 29 | self.frame = frame; 30 | } 31 | 32 | - (CGFloat)mj_y 33 | { 34 | return self.frame.origin.y; 35 | } 36 | 37 | - (void)setMj_w:(CGFloat)mj_w 38 | { 39 | CGRect frame = self.frame; 40 | frame.size.width = mj_w; 41 | self.frame = frame; 42 | } 43 | 44 | - (CGFloat)mj_w 45 | { 46 | return self.frame.size.width; 47 | } 48 | 49 | - (void)setMj_h:(CGFloat)mj_h 50 | { 51 | CGRect frame = self.frame; 52 | frame.size.height = mj_h; 53 | self.frame = frame; 54 | } 55 | 56 | - (CGFloat)mj_h 57 | { 58 | return self.frame.size.height; 59 | } 60 | 61 | - (void)setMj_size:(CGSize)mj_size 62 | { 63 | CGRect frame = self.frame; 64 | frame.size = mj_size; 65 | self.frame = frame; 66 | } 67 | 68 | - (CGSize)mj_size 69 | { 70 | return self.frame.size; 71 | } 72 | 73 | - (void)setMj_origin:(CGPoint)mj_origin 74 | { 75 | CGRect frame = self.frame; 76 | frame.origin = mj_origin; 77 | self.frame = frame; 78 | } 79 | 80 | - (CGPoint)mj_origin 81 | { 82 | return self.frame.origin; 83 | } 84 | @end 85 | -------------------------------------------------------------------------------- /Pods/Manifest.lock: -------------------------------------------------------------------------------- 1 | PODS: 2 | - Alamofire (5.4.1) 3 | - HandyJSON (5.0.2) 4 | - MJRefresh (3.5.0) 5 | - Moya (14.0.0): 6 | - Moya/Core (= 14.0.0) 7 | - Moya/Core (14.0.0): 8 | - Alamofire (~> 5.0) 9 | - SnapKit (5.0.1) 10 | 11 | DEPENDENCIES: 12 | - Alamofire 13 | - HandyJSON 14 | - MJRefresh 15 | - Moya 16 | - SnapKit 17 | 18 | SPEC REPOS: 19 | trunk: 20 | - Alamofire 21 | - HandyJSON 22 | - MJRefresh 23 | - Moya 24 | - SnapKit 25 | 26 | SPEC CHECKSUMS: 27 | Alamofire: 2291f7d21ca607c491dd17642e5d40fdcda0e65c 28 | HandyJSON: 9e4e236f5d2dbefad5155a77417bbea438201c03 29 | MJRefresh: 6afc955813966afb08305477dd7a0d9ad5e79a16 30 | Moya: 5b45dacb75adb009f97fde91c204c1e565d31916 31 | SnapKit: 97b92857e3df3a0c71833cce143274bf6ef8e5eb 32 | 33 | PODFILE CHECKSUM: 00c3dc399ab9280e8c22c55c86e08eaefd170385 34 | 35 | COCOAPODS: 1.9.1 36 | -------------------------------------------------------------------------------- /Pods/Moya/License.md: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2014-present Artsy, Ash Furrow 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /Pods/Moya/Sources/Moya/AnyEncodable.swift: -------------------------------------------------------------------------------- 1 | import Foundation 2 | 3 | struct AnyEncodable: Encodable { 4 | 5 | private let encodable: Encodable 6 | 7 | public init(_ encodable: Encodable) { 8 | self.encodable = encodable 9 | } 10 | 11 | func encode(to encoder: Encoder) throws { 12 | try encodable.encode(to: encoder) 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /Pods/Moya/Sources/Moya/Cancellable.swift: -------------------------------------------------------------------------------- 1 | /// Protocol to define the opaque type returned from a request. 2 | public protocol Cancellable { 3 | 4 | /// A Boolean value stating whether a request is cancelled. 5 | var isCancelled: Bool { get } 6 | 7 | /// Cancels the represented request. 8 | func cancel() 9 | } 10 | 11 | internal class CancellableWrapper: Cancellable { 12 | internal var innerCancellable: Cancellable = SimpleCancellable() 13 | 14 | var isCancelled: Bool { return innerCancellable.isCancelled } 15 | 16 | internal func cancel() { 17 | innerCancellable.cancel() 18 | } 19 | } 20 | 21 | internal class SimpleCancellable: Cancellable { 22 | var isCancelled = false 23 | func cancel() { 24 | isCancelled = true 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /Pods/Moya/Sources/Moya/Image.swift: -------------------------------------------------------------------------------- 1 | #if canImport(UIKit) 2 | import UIKit.UIImage 3 | public typealias ImageType = UIImage 4 | #elseif canImport(AppKit) 5 | import AppKit.NSImage 6 | public typealias ImageType = NSImage 7 | #endif 8 | 9 | /// An alias for the SDK's image type. 10 | public typealias Image = ImageType 11 | -------------------------------------------------------------------------------- /Pods/Moya/Sources/Moya/MoyaProvider+Defaults.swift: -------------------------------------------------------------------------------- 1 | import Foundation 2 | 3 | /// These functions are default mappings to `MoyaProvider`'s properties: endpoints, requests, session etc. 4 | public extension MoyaProvider { 5 | final class func defaultEndpointMapping(for target: Target) -> Endpoint { 6 | return Endpoint( 7 | url: URL(target: target).absoluteString, 8 | sampleResponseClosure: { .networkResponse(200, target.sampleData) }, 9 | method: target.method, 10 | task: target.task, 11 | httpHeaderFields: target.headers 12 | ) 13 | } 14 | 15 | final class func defaultRequestMapping(for endpoint: Endpoint, closure: RequestResultClosure) { 16 | do { 17 | let urlRequest = try endpoint.urlRequest() 18 | closure(.success(urlRequest)) 19 | } catch MoyaError.requestMapping(let url) { 20 | closure(.failure(MoyaError.requestMapping(url))) 21 | } catch MoyaError.parameterEncoding(let error) { 22 | closure(.failure(MoyaError.parameterEncoding(error))) 23 | } catch { 24 | closure(.failure(MoyaError.underlying(error, nil))) 25 | } 26 | } 27 | 28 | final class func defaultAlamofireSession() -> Session { 29 | let configuration = URLSessionConfiguration.default 30 | configuration.headers = .default 31 | 32 | return Session(configuration: configuration, startRequestsImmediately: false) 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /Pods/Moya/Sources/Moya/MultiTarget.swift: -------------------------------------------------------------------------------- 1 | import Foundation 2 | 3 | /// A `TargetType` used to enable `MoyaProvider` to process multiple `TargetType`s. 4 | public enum MultiTarget: TargetType { 5 | /// The embedded `TargetType`. 6 | case target(TargetType) 7 | 8 | /// Initializes a `MultiTarget`. 9 | public init(_ target: TargetType) { 10 | self = MultiTarget.target(target) 11 | } 12 | 13 | /// The embedded target's base `URL`. 14 | public var path: String { 15 | return target.path 16 | } 17 | 18 | /// The baseURL of the embedded target. 19 | public var baseURL: URL { 20 | return target.baseURL 21 | } 22 | 23 | /// The HTTP method of the embedded target. 24 | public var method: Moya.Method { 25 | return target.method 26 | } 27 | 28 | /// The sampleData of the embedded target. 29 | public var sampleData: Data { 30 | return target.sampleData 31 | } 32 | 33 | /// The `Task` of the embedded target. 34 | public var task: Task { 35 | return target.task 36 | } 37 | 38 | /// The `ValidationType` of the embedded target. 39 | public var validationType: ValidationType { 40 | return target.validationType 41 | } 42 | 43 | /// The headers of the embedded target. 44 | public var headers: [String: String]? { 45 | return target.headers 46 | } 47 | 48 | /// The embedded `TargetType`. 49 | public var target: TargetType { 50 | switch self { 51 | case .target(let target): return target 52 | } 53 | } 54 | } 55 | 56 | extension MultiTarget: AccessTokenAuthorizable { 57 | public var authorizationType: AuthorizationType? { 58 | guard let authorizableTarget = target as? AccessTokenAuthorizable else { return nil } 59 | return authorizableTarget.authorizationType 60 | } 61 | } 62 | -------------------------------------------------------------------------------- /Pods/Moya/Sources/Moya/Plugins/CredentialsPlugin.swift: -------------------------------------------------------------------------------- 1 | import Foundation 2 | 3 | /// Provides each request with optional URLCredentials. 4 | public final class CredentialsPlugin: PluginType { 5 | 6 | public typealias CredentialClosure = (TargetType) -> URLCredential? 7 | let credentialsClosure: CredentialClosure 8 | 9 | /// Initializes a CredentialsPlugin. 10 | public init(credentialsClosure: @escaping CredentialClosure) { 11 | self.credentialsClosure = credentialsClosure 12 | } 13 | 14 | // MARK: Plugin 15 | 16 | public func willSend(_ request: RequestType, target: TargetType) { 17 | if let credentials = credentialsClosure(target) { 18 | _ = request.authenticate(with: credentials) 19 | } 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /Pods/Moya/Sources/Moya/Plugins/NetworkActivityPlugin.swift: -------------------------------------------------------------------------------- 1 | import Foundation 2 | 3 | /// Network activity change notification type. 4 | public enum NetworkActivityChangeType { 5 | case began, ended 6 | } 7 | 8 | /// Notify a request's network activity changes (request begins or ends). 9 | public final class NetworkActivityPlugin: PluginType { 10 | 11 | public typealias NetworkActivityClosure = (_ change: NetworkActivityChangeType, _ target: TargetType) -> Void 12 | let networkActivityClosure: NetworkActivityClosure 13 | 14 | /// Initializes a NetworkActivityPlugin. 15 | public init(networkActivityClosure: @escaping NetworkActivityClosure) { 16 | self.networkActivityClosure = networkActivityClosure 17 | } 18 | 19 | // MARK: Plugin 20 | 21 | /// Called by the provider as soon as the request is about to start 22 | public func willSend(_ request: RequestType, target: TargetType) { 23 | networkActivityClosure(.began, target) 24 | } 25 | 26 | /// Called by the provider as soon as a response arrives, even if the request is canceled. 27 | public func didReceive(_ result: Result, target: TargetType) { 28 | networkActivityClosure(.ended, target) 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /Pods/Moya/Sources/Moya/RequestTypeWrapper.swift: -------------------------------------------------------------------------------- 1 | import Foundation 2 | 3 | // Workaround for new asynchronous handling of Alamofire's request creation. 4 | struct RequestTypeWrapper: RequestType { 5 | 6 | var request: URLRequest? { 7 | return _urlRequest 8 | } 9 | 10 | var sessionHeaders: [String: String] { 11 | return _request.sessionHeaders 12 | } 13 | 14 | private var _request: Request 15 | private var _urlRequest: URLRequest? 16 | 17 | init(request: Request, urlRequest: URLRequest?) { 18 | self._request = request 19 | self._urlRequest = urlRequest 20 | } 21 | 22 | func authenticate(username: String, password: String, persistence: URLCredential.Persistence) -> RequestTypeWrapper { 23 | let newRequest = _request.authenticate(username: username, password: password, persistence: persistence) 24 | return RequestTypeWrapper(request: newRequest, urlRequest: _urlRequest) 25 | } 26 | 27 | func authenticate(with credential: URLCredential) -> RequestTypeWrapper { 28 | let newRequest = _request.authenticate(with: credential) 29 | return RequestTypeWrapper(request: newRequest, urlRequest: _urlRequest) 30 | } 31 | 32 | func cURLDescription(calling handler: @escaping (String) -> Void) -> RequestTypeWrapper { 33 | _request.cURLDescription(calling: handler) 34 | return self 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /Pods/Moya/Sources/Moya/TargetType.swift: -------------------------------------------------------------------------------- 1 | import Foundation 2 | 3 | /// The protocol used to define the specifications necessary for a `MoyaProvider`. 4 | public protocol TargetType { 5 | 6 | /// The target's base `URL`. 7 | var baseURL: URL { get } 8 | 9 | /// The path to be appended to `baseURL` to form the full `URL`. 10 | var path: String { get } 11 | 12 | /// The HTTP method used in the request. 13 | var method: Moya.Method { get } 14 | 15 | /// Provides stub data for use in testing. 16 | var sampleData: Data { get } 17 | 18 | /// The type of HTTP task to be performed. 19 | var task: Task { get } 20 | 21 | /// The type of validation to perform on the request. Default is `.none`. 22 | var validationType: ValidationType { get } 23 | 24 | /// The headers to be used in the request. 25 | var headers: [String: String]? { get } 26 | } 27 | 28 | public extension TargetType { 29 | 30 | /// The type of validation to perform on the request. Default is `.none`. 31 | var validationType: ValidationType { 32 | return .none 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /Pods/Moya/Sources/Moya/Task.swift: -------------------------------------------------------------------------------- 1 | import Foundation 2 | 3 | /// Represents an HTTP task. 4 | public enum Task { 5 | 6 | /// A request with no additional data. 7 | case requestPlain 8 | 9 | /// A requests body set with data. 10 | case requestData(Data) 11 | 12 | /// A request body set with `Encodable` type 13 | case requestJSONEncodable(Encodable) 14 | 15 | /// A request body set with `Encodable` type and custom encoder 16 | case requestCustomJSONEncodable(Encodable, encoder: JSONEncoder) 17 | 18 | /// A requests body set with encoded parameters. 19 | case requestParameters(parameters: [String: Any], encoding: ParameterEncoding) 20 | 21 | /// A requests body set with data, combined with url parameters. 22 | case requestCompositeData(bodyData: Data, urlParameters: [String: Any]) 23 | 24 | /// A requests body set with encoded parameters combined with url parameters. 25 | case requestCompositeParameters(bodyParameters: [String: Any], bodyEncoding: ParameterEncoding, urlParameters: [String: Any]) 26 | 27 | /// A file upload task. 28 | case uploadFile(URL) 29 | 30 | /// A "multipart/form-data" upload task. 31 | case uploadMultipart([MultipartFormData]) 32 | 33 | /// A "multipart/form-data" upload task combined with url parameters. 34 | case uploadCompositeMultipart([MultipartFormData], urlParameters: [String: Any]) 35 | 36 | /// A file download task to a destination. 37 | case downloadDestination(DownloadDestination) 38 | 39 | /// A file download task to a destination with extra parameters using the given encoding. 40 | case downloadParameters(parameters: [String: Any], encoding: ParameterEncoding, destination: DownloadDestination) 41 | } 42 | -------------------------------------------------------------------------------- /Pods/Moya/Sources/Moya/URL+Moya.swift: -------------------------------------------------------------------------------- 1 | import Foundation 2 | 3 | public extension URL { 4 | 5 | /// Initialize URL from Moya's `TargetType`. 6 | init(target: T) { 7 | // When a TargetType's path is empty, URL.appendingPathComponent may introduce trailing /, which may not be wanted in some cases 8 | // See: https://github.com/Moya/Moya/pull/1053 9 | // And: https://github.com/Moya/Moya/issues/1049 10 | let targetPath = target.path 11 | if targetPath.isEmpty { 12 | self = target.baseURL 13 | } else { 14 | self = target.baseURL.appendingPathComponent(targetPath) 15 | } 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /Pods/Moya/Sources/Moya/URLRequest+Encoding.swift: -------------------------------------------------------------------------------- 1 | import Foundation 2 | 3 | internal extension URLRequest { 4 | 5 | mutating func encoded(encodable: Encodable, encoder: JSONEncoder = JSONEncoder()) throws -> URLRequest { 6 | do { 7 | let encodable = AnyEncodable(encodable) 8 | httpBody = try encoder.encode(encodable) 9 | 10 | let contentTypeHeaderName = "Content-Type" 11 | if value(forHTTPHeaderField: contentTypeHeaderName) == nil { 12 | setValue("application/json", forHTTPHeaderField: contentTypeHeaderName) 13 | } 14 | 15 | return self 16 | } catch { 17 | throw MoyaError.encodableMapping(error) 18 | } 19 | } 20 | 21 | func encoded(parameters: [String: Any], parameterEncoding: ParameterEncoding) throws -> URLRequest { 22 | do { 23 | return try parameterEncoding.encode(self, with: parameters) 24 | } catch { 25 | throw MoyaError.parameterEncoding(error) 26 | } 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /Pods/Moya/Sources/Moya/ValidationType.swift: -------------------------------------------------------------------------------- 1 | import Foundation 2 | 3 | /// Represents the status codes to validate through Alamofire. 4 | public enum ValidationType { 5 | 6 | /// No validation. 7 | case none 8 | 9 | /// Validate success codes (only 2xx). 10 | case successCodes 11 | 12 | /// Validate success codes and redirection codes (only 2xx and 3xx). 13 | case successAndRedirectCodes 14 | 15 | /// Validate only the given status codes. 16 | case customCodes([Int]) 17 | 18 | /// The list of HTTP status codes to validate. 19 | var statusCodes: [Int] { 20 | switch self { 21 | case .successCodes: 22 | return Array(200..<300) 23 | case .successAndRedirectCodes: 24 | return Array(200..<400) 25 | case .customCodes(let codes): 26 | return codes 27 | case .none: 28 | return [] 29 | } 30 | } 31 | } 32 | 33 | extension ValidationType: Equatable { 34 | 35 | public static func == (lhs: ValidationType, rhs: ValidationType) -> Bool { 36 | switch (lhs, rhs) { 37 | case (.none, .none), 38 | (.successCodes, .successCodes), 39 | (.successAndRedirectCodes, .successAndRedirectCodes): 40 | return true 41 | case (.customCodes(let code1), .customCodes(let code2)): 42 | return code1 == code2 43 | default: 44 | return false 45 | } 46 | } 47 | } 48 | -------------------------------------------------------------------------------- /Pods/SnapKit/LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining a copy 4 | of this software and associated documentation files (the "Software"), to deal 5 | in the Software without restriction, including without limitation the rights 6 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 7 | copies of the Software, and to permit persons to whom the Software is 8 | furnished to do so, subject to the following conditions: 9 | 10 | The above copyright notice and this permission notice shall be included in 11 | all copies or substantial portions of the Software. 12 | 13 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 14 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 15 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 16 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 17 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 18 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 19 | THE SOFTWARE. 20 | -------------------------------------------------------------------------------- /Pods/SnapKit/Source/ConstraintConfig.swift: -------------------------------------------------------------------------------- 1 | // 2 | // SnapKit 3 | // 4 | // Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit 5 | // 6 | // Permission is hereby granted, free of charge, to any person obtaining a copy 7 | // of this software and associated documentation files (the "Software"), to deal 8 | // in the Software without restriction, including without limitation the rights 9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | // copies of the Software, and to permit persons to whom the Software is 11 | // furnished to do so, subject to the following conditions: 12 | // 13 | // The above copyright notice and this permission notice shall be included in 14 | // all copies or substantial portions of the Software. 15 | // 16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 22 | // THE SOFTWARE. 23 | 24 | #if os(iOS) || os(tvOS) 25 | import UIKit 26 | public typealias ConstraintInterfaceLayoutDirection = UIUserInterfaceLayoutDirection 27 | #else 28 | import AppKit 29 | public typealias ConstraintInterfaceLayoutDirection = NSUserInterfaceLayoutDirection 30 | #endif 31 | 32 | 33 | public struct ConstraintConfig { 34 | 35 | public static var interfaceLayoutDirection: ConstraintInterfaceLayoutDirection = .leftToRight 36 | 37 | } 38 | -------------------------------------------------------------------------------- /Pods/SnapKit/Source/ConstraintDirectionalInsetTarget.swift: -------------------------------------------------------------------------------- 1 | // 2 | // SnapKit 3 | // 4 | // Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit 5 | // 6 | // Permission is hereby granted, free of charge, to any person obtaining a copy 7 | // of this software and associated documentation files (the "Software"), to deal 8 | // in the Software without restriction, including without limitation the rights 9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | // copies of the Software, and to permit persons to whom the Software is 11 | // furnished to do so, subject to the following conditions: 12 | // 13 | // The above copyright notice and this permission notice shall be included in 14 | // all copies or substantial portions of the Software. 15 | // 16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 22 | // THE SOFTWARE. 23 | 24 | #if os(iOS) || os(tvOS) 25 | import UIKit 26 | #else 27 | import AppKit 28 | #endif 29 | 30 | #if os(iOS) || os(tvOS) 31 | public protocol ConstraintDirectionalInsetTarget: ConstraintConstantTarget { 32 | } 33 | 34 | @available(iOS 11.0, tvOS 11.0, *) 35 | extension ConstraintDirectionalInsets: ConstraintDirectionalInsetTarget { 36 | } 37 | 38 | extension ConstraintDirectionalInsetTarget { 39 | 40 | @available(iOS 11.0, tvOS 11.0, *) 41 | internal var constraintDirectionalInsetTargetValue: ConstraintDirectionalInsets { 42 | if let amount = self as? ConstraintDirectionalInsets { 43 | return amount 44 | } else { 45 | return ConstraintDirectionalInsets(top: 0, leading: 0, bottom: 0, trailing: 0) 46 | } 47 | } 48 | } 49 | #endif 50 | -------------------------------------------------------------------------------- /Pods/SnapKit/Source/ConstraintDirectionalInsets.swift: -------------------------------------------------------------------------------- 1 | // 2 | // SnapKit 3 | // 4 | // Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit 5 | // 6 | // Permission is hereby granted, free of charge, to any person obtaining a copy 7 | // of this software and associated documentation files (the "Software"), to deal 8 | // in the Software without restriction, including without limitation the rights 9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | // copies of the Software, and to permit persons to whom the Software is 11 | // furnished to do so, subject to the following conditions: 12 | // 13 | // The above copyright notice and this permission notice shall be included in 14 | // all copies or substantial portions of the Software. 15 | // 16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 22 | // THE SOFTWARE. 23 | 24 | #if os(iOS) || os(tvOS) 25 | import UIKit 26 | #else 27 | import AppKit 28 | #endif 29 | 30 | 31 | #if os(iOS) || os(tvOS) 32 | @available(iOS 11.0, tvOS 11.0, *) 33 | public typealias ConstraintDirectionalInsets = NSDirectionalEdgeInsets 34 | #endif 35 | -------------------------------------------------------------------------------- /Pods/SnapKit/Source/ConstraintInsets.swift: -------------------------------------------------------------------------------- 1 | // 2 | // SnapKit 3 | // 4 | // Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit 5 | // 6 | // Permission is hereby granted, free of charge, to any person obtaining a copy 7 | // of this software and associated documentation files (the "Software"), to deal 8 | // in the Software without restriction, including without limitation the rights 9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | // copies of the Software, and to permit persons to whom the Software is 11 | // furnished to do so, subject to the following conditions: 12 | // 13 | // The above copyright notice and this permission notice shall be included in 14 | // all copies or substantial portions of the Software. 15 | // 16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 22 | // THE SOFTWARE. 23 | 24 | #if os(iOS) || os(tvOS) 25 | import UIKit 26 | #else 27 | import AppKit 28 | #endif 29 | 30 | 31 | #if os(iOS) || os(tvOS) 32 | public typealias ConstraintInsets = UIEdgeInsets 33 | #else 34 | public typealias ConstraintInsets = NSEdgeInsets 35 | #endif 36 | -------------------------------------------------------------------------------- /Pods/SnapKit/Source/ConstraintLayoutGuide+Extensions.swift: -------------------------------------------------------------------------------- 1 | // 2 | // SnapKit 3 | // 4 | // Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit 5 | // 6 | // Permission is hereby granted, free of charge, to any person obtaining a copy 7 | // of this software and associated documentation files (the "Software"), to deal 8 | // in the Software without restriction, including without limitation the rights 9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | // copies of the Software, and to permit persons to whom the Software is 11 | // furnished to do so, subject to the following conditions: 12 | // 13 | // The above copyright notice and this permission notice shall be included in 14 | // all copies or substantial portions of the Software. 15 | // 16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 22 | // THE SOFTWARE. 23 | 24 | #if os(iOS) || os(tvOS) 25 | import UIKit 26 | #endif 27 | 28 | 29 | @available(iOS 9.0, OSX 10.11, *) 30 | public extension ConstraintLayoutGuide { 31 | 32 | var snp: ConstraintLayoutGuideDSL { 33 | return ConstraintLayoutGuideDSL(guide: self) 34 | } 35 | 36 | } 37 | -------------------------------------------------------------------------------- /Pods/SnapKit/Source/ConstraintLayoutGuide.swift: -------------------------------------------------------------------------------- 1 | // 2 | // SnapKit 3 | // 4 | // Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit 5 | // 6 | // Permission is hereby granted, free of charge, to any person obtaining a copy 7 | // of this software and associated documentation files (the "Software"), to deal 8 | // in the Software without restriction, including without limitation the rights 9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | // copies of the Software, and to permit persons to whom the Software is 11 | // furnished to do so, subject to the following conditions: 12 | // 13 | // The above copyright notice and this permission notice shall be included in 14 | // all copies or substantial portions of the Software. 15 | // 16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 22 | // THE SOFTWARE. 23 | 24 | #if os(iOS) || os(tvOS) 25 | import UIKit 26 | #else 27 | import AppKit 28 | #endif 29 | 30 | 31 | #if os(iOS) || os(tvOS) 32 | @available(iOS 9.0, *) 33 | public typealias ConstraintLayoutGuide = UILayoutGuide 34 | #else 35 | @available(OSX 10.11, *) 36 | public typealias ConstraintLayoutGuide = NSLayoutGuide 37 | #endif 38 | -------------------------------------------------------------------------------- /Pods/SnapKit/Source/ConstraintLayoutSupport.swift: -------------------------------------------------------------------------------- 1 | // 2 | // SnapKit 3 | // 4 | // Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit 5 | // 6 | // Permission is hereby granted, free of charge, to any person obtaining a copy 7 | // of this software and associated documentation files (the "Software"), to deal 8 | // in the Software without restriction, including without limitation the rights 9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | // copies of the Software, and to permit persons to whom the Software is 11 | // furnished to do so, subject to the following conditions: 12 | // 13 | // The above copyright notice and this permission notice shall be included in 14 | // all copies or substantial portions of the Software. 15 | // 16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 22 | // THE SOFTWARE. 23 | 24 | #if os(iOS) || os(tvOS) 25 | import UIKit 26 | #else 27 | import AppKit 28 | #endif 29 | 30 | 31 | #if os(iOS) || os(tvOS) 32 | @available(iOS 8.0, *) 33 | public typealias ConstraintLayoutSupport = UILayoutSupport 34 | #else 35 | public class ConstraintLayoutSupport {} 36 | #endif 37 | -------------------------------------------------------------------------------- /Pods/SnapKit/Source/ConstraintMakerFinalizable.swift: -------------------------------------------------------------------------------- 1 | // 2 | // SnapKit 3 | // 4 | // Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit 5 | // 6 | // Permission is hereby granted, free of charge, to any person obtaining a copy 7 | // of this software and associated documentation files (the "Software"), to deal 8 | // in the Software without restriction, including without limitation the rights 9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | // copies of the Software, and to permit persons to whom the Software is 11 | // furnished to do so, subject to the following conditions: 12 | // 13 | // The above copyright notice and this permission notice shall be included in 14 | // all copies or substantial portions of the Software. 15 | // 16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 22 | // THE SOFTWARE. 23 | 24 | #if os(iOS) || os(tvOS) 25 | import UIKit 26 | #else 27 | import AppKit 28 | #endif 29 | 30 | 31 | public class ConstraintMakerFinalizable { 32 | 33 | internal let description: ConstraintDescription 34 | 35 | internal init(_ description: ConstraintDescription) { 36 | self.description = description 37 | } 38 | 39 | @discardableResult 40 | public func labeled(_ label: String) -> ConstraintMakerFinalizable { 41 | self.description.label = label 42 | return self 43 | } 44 | 45 | public var constraint: Constraint { 46 | return self.description.constraint! 47 | } 48 | 49 | } 50 | -------------------------------------------------------------------------------- /Pods/SnapKit/Source/ConstraintRelation.swift: -------------------------------------------------------------------------------- 1 | // 2 | // SnapKit 3 | // 4 | // Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit 5 | // 6 | // Permission is hereby granted, free of charge, to any person obtaining a copy 7 | // of this software and associated documentation files (the "Software"), to deal 8 | // in the Software without restriction, including without limitation the rights 9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | // copies of the Software, and to permit persons to whom the Software is 11 | // furnished to do so, subject to the following conditions: 12 | // 13 | // The above copyright notice and this permission notice shall be included in 14 | // all copies or substantial portions of the Software. 15 | // 16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 22 | // THE SOFTWARE. 23 | 24 | #if os(iOS) || os(tvOS) 25 | import UIKit 26 | #else 27 | import AppKit 28 | #endif 29 | 30 | 31 | internal enum ConstraintRelation : Int { 32 | case equal = 1 33 | case lessThanOrEqual 34 | case greaterThanOrEqual 35 | 36 | internal var layoutRelation: LayoutRelation { 37 | get { 38 | switch(self) { 39 | case .equal: 40 | return .equal 41 | case .lessThanOrEqual: 42 | return .lessThanOrEqual 43 | case .greaterThanOrEqual: 44 | return .greaterThanOrEqual 45 | } 46 | } 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /Pods/SnapKit/Source/ConstraintView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // SnapKit 3 | // 4 | // Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit 5 | // 6 | // Permission is hereby granted, free of charge, to any person obtaining a copy 7 | // of this software and associated documentation files (the "Software"), to deal 8 | // in the Software without restriction, including without limitation the rights 9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | // copies of the Software, and to permit persons to whom the Software is 11 | // furnished to do so, subject to the following conditions: 12 | // 13 | // The above copyright notice and this permission notice shall be included in 14 | // all copies or substantial portions of the Software. 15 | // 16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 22 | // THE SOFTWARE. 23 | 24 | #if os(iOS) || os(tvOS) 25 | import UIKit 26 | #else 27 | import AppKit 28 | #endif 29 | 30 | 31 | #if os(iOS) || os(tvOS) 32 | public typealias ConstraintView = UIView 33 | #else 34 | public typealias ConstraintView = NSView 35 | #endif 36 | -------------------------------------------------------------------------------- /Pods/SnapKit/Source/Typealiases.swift: -------------------------------------------------------------------------------- 1 | // 2 | // SnapKit 3 | // 4 | // Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit 5 | // 6 | // Permission is hereby granted, free of charge, to any person obtaining a copy 7 | // of this software and associated documentation files (the "Software"), to deal 8 | // in the Software without restriction, including without limitation the rights 9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | // copies of the Software, and to permit persons to whom the Software is 11 | // furnished to do so, subject to the following conditions: 12 | // 13 | // The above copyright notice and this permission notice shall be included in 14 | // all copies or substantial portions of the Software. 15 | // 16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 22 | // THE SOFTWARE. 23 | 24 | import Foundation 25 | 26 | #if os(iOS) || os(tvOS) 27 | import UIKit 28 | #if swift(>=4.2) 29 | typealias LayoutRelation = NSLayoutConstraint.Relation 30 | typealias LayoutAttribute = NSLayoutConstraint.Attribute 31 | #else 32 | typealias LayoutRelation = NSLayoutRelation 33 | typealias LayoutAttribute = NSLayoutAttribute 34 | #endif 35 | typealias LayoutPriority = UILayoutPriority 36 | #else 37 | import AppKit 38 | typealias LayoutRelation = NSLayoutConstraint.Relation 39 | typealias LayoutAttribute = NSLayoutConstraint.Attribute 40 | typealias LayoutPriority = NSLayoutConstraint.Priority 41 | #endif 42 | 43 | -------------------------------------------------------------------------------- /Pods/SnapKit/Source/UILayoutSupport+Extensions.swift: -------------------------------------------------------------------------------- 1 | // 2 | // SnapKit 3 | // 4 | // Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit 5 | // 6 | // Permission is hereby granted, free of charge, to any person obtaining a copy 7 | // of this software and associated documentation files (the "Software"), to deal 8 | // in the Software without restriction, including without limitation the rights 9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | // copies of the Software, and to permit persons to whom the Software is 11 | // furnished to do so, subject to the following conditions: 12 | // 13 | // The above copyright notice and this permission notice shall be included in 14 | // all copies or substantial portions of the Software. 15 | // 16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 22 | // THE SOFTWARE. 23 | 24 | #if os(iOS) || os(tvOS) 25 | import UIKit 26 | #endif 27 | 28 | 29 | @available(iOS 8.0, *) 30 | public extension ConstraintLayoutSupport { 31 | 32 | var snp: ConstraintLayoutSupportDSL { 33 | return ConstraintLayoutSupportDSL(support: self) 34 | } 35 | 36 | } 37 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Alamofire/Alamofire-Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | ${EXECUTABLE_NAME} 9 | CFBundleIdentifier 10 | ${PRODUCT_BUNDLE_IDENTIFIER} 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | ${PRODUCT_NAME} 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 5.4.1 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | ${CURRENT_PROJECT_VERSION} 23 | NSPrincipalClass 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Alamofire/Alamofire-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_Alamofire : NSObject 3 | @end 4 | @implementation PodsDummy_Alamofire 5 | @end 6 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Alamofire/Alamofire-prefix.pch: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Alamofire/Alamofire-umbrella.h: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | 14 | FOUNDATION_EXPORT double AlamofireVersionNumber; 15 | FOUNDATION_EXPORT const unsigned char AlamofireVersionString[]; 16 | 17 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Alamofire/Alamofire.debug.xcconfig: -------------------------------------------------------------------------------- 1 | CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/Alamofire 2 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 3 | OTHER_LDFLAGS = $(inherited) -framework "CFNetwork" 4 | OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS -suppress-warnings 5 | PODS_BUILD_DIR = ${BUILD_DIR} 6 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 7 | PODS_ROOT = ${SRCROOT} 8 | PODS_TARGET_SRCROOT = ${PODS_ROOT}/Alamofire 9 | PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} 10 | SKIP_INSTALL = YES 11 | USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES 12 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Alamofire/Alamofire.modulemap: -------------------------------------------------------------------------------- 1 | framework module Alamofire { 2 | umbrella header "Alamofire-umbrella.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Alamofire/Alamofire.release.xcconfig: -------------------------------------------------------------------------------- 1 | CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/Alamofire 2 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 3 | OTHER_LDFLAGS = $(inherited) -framework "CFNetwork" 4 | OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS -suppress-warnings 5 | PODS_BUILD_DIR = ${BUILD_DIR} 6 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 7 | PODS_ROOT = ${SRCROOT} 8 | PODS_TARGET_SRCROOT = ${PODS_ROOT}/Alamofire 9 | PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} 10 | SKIP_INSTALL = YES 11 | USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES 12 | -------------------------------------------------------------------------------- /Pods/Target Support Files/HandyJSON/HandyJSON-Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | ${EXECUTABLE_NAME} 9 | CFBundleIdentifier 10 | ${PRODUCT_BUNDLE_IDENTIFIER} 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | ${PRODUCT_NAME} 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 5.0.2 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | ${CURRENT_PROJECT_VERSION} 23 | NSPrincipalClass 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /Pods/Target Support Files/HandyJSON/HandyJSON-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_HandyJSON : NSObject 3 | @end 4 | @implementation PodsDummy_HandyJSON 5 | @end 6 | -------------------------------------------------------------------------------- /Pods/Target Support Files/HandyJSON/HandyJSON-prefix.pch: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | -------------------------------------------------------------------------------- /Pods/Target Support Files/HandyJSON/HandyJSON-umbrella.h: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | #import "HandyJSON.h" 14 | 15 | FOUNDATION_EXPORT double HandyJSONVersionNumber; 16 | FOUNDATION_EXPORT const unsigned char HandyJSONVersionString[]; 17 | 18 | -------------------------------------------------------------------------------- /Pods/Target Support Files/HandyJSON/HandyJSON.debug.xcconfig: -------------------------------------------------------------------------------- 1 | CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/HandyJSON 2 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 3 | OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS -suppress-warnings 4 | PODS_BUILD_DIR = ${BUILD_DIR} 5 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 6 | PODS_ROOT = ${SRCROOT} 7 | PODS_TARGET_SRCROOT = ${PODS_ROOT}/HandyJSON 8 | PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} 9 | SKIP_INSTALL = YES 10 | SWIFT_VERSION = 5.0 11 | USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES 12 | -------------------------------------------------------------------------------- /Pods/Target Support Files/HandyJSON/HandyJSON.modulemap: -------------------------------------------------------------------------------- 1 | framework module HandyJSON { 2 | umbrella header "HandyJSON-umbrella.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | -------------------------------------------------------------------------------- /Pods/Target Support Files/HandyJSON/HandyJSON.release.xcconfig: -------------------------------------------------------------------------------- 1 | CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/HandyJSON 2 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 3 | OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS -suppress-warnings 4 | PODS_BUILD_DIR = ${BUILD_DIR} 5 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 6 | PODS_ROOT = ${SRCROOT} 7 | PODS_TARGET_SRCROOT = ${PODS_ROOT}/HandyJSON 8 | PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} 9 | SKIP_INSTALL = YES 10 | SWIFT_VERSION = 5.0 11 | USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES 12 | -------------------------------------------------------------------------------- /Pods/Target Support Files/MJRefresh/MJRefresh-Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | ${EXECUTABLE_NAME} 9 | CFBundleIdentifier 10 | ${PRODUCT_BUNDLE_IDENTIFIER} 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | ${PRODUCT_NAME} 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 3.5.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | ${CURRENT_PROJECT_VERSION} 23 | NSPrincipalClass 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /Pods/Target Support Files/MJRefresh/MJRefresh-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_MJRefresh : NSObject 3 | @end 4 | @implementation PodsDummy_MJRefresh 5 | @end 6 | -------------------------------------------------------------------------------- /Pods/Target Support Files/MJRefresh/MJRefresh-prefix.pch: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | -------------------------------------------------------------------------------- /Pods/Target Support Files/MJRefresh/MJRefresh-umbrella.h: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | #import "MJRefreshAutoFooter.h" 14 | #import "MJRefreshBackFooter.h" 15 | #import "MJRefreshComponent.h" 16 | #import "MJRefreshFooter.h" 17 | #import "MJRefreshHeader.h" 18 | #import "MJRefreshTrailer.h" 19 | #import "MJRefreshAutoGifFooter.h" 20 | #import "MJRefreshAutoNormalFooter.h" 21 | #import "MJRefreshAutoStateFooter.h" 22 | #import "MJRefreshBackGifFooter.h" 23 | #import "MJRefreshBackNormalFooter.h" 24 | #import "MJRefreshBackStateFooter.h" 25 | #import "MJRefreshGifHeader.h" 26 | #import "MJRefreshNormalHeader.h" 27 | #import "MJRefreshStateHeader.h" 28 | #import "MJRefreshNormalTrailer.h" 29 | #import "MJRefreshStateTrailer.h" 30 | #import "MJRefresh.h" 31 | #import "MJRefreshConfig.h" 32 | #import "MJRefreshConst.h" 33 | #import "NSBundle+MJRefresh.h" 34 | #import "UIScrollView+MJExtension.h" 35 | #import "UIScrollView+MJRefresh.h" 36 | #import "UIView+MJExtension.h" 37 | 38 | FOUNDATION_EXPORT double MJRefreshVersionNumber; 39 | FOUNDATION_EXPORT const unsigned char MJRefreshVersionString[]; 40 | 41 | -------------------------------------------------------------------------------- /Pods/Target Support Files/MJRefresh/MJRefresh.debug.xcconfig: -------------------------------------------------------------------------------- 1 | CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/MJRefresh 2 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 3 | PODS_BUILD_DIR = ${BUILD_DIR} 4 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 5 | PODS_ROOT = ${SRCROOT} 6 | PODS_TARGET_SRCROOT = ${PODS_ROOT}/MJRefresh 7 | PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} 8 | SKIP_INSTALL = YES 9 | USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES 10 | -------------------------------------------------------------------------------- /Pods/Target Support Files/MJRefresh/MJRefresh.modulemap: -------------------------------------------------------------------------------- 1 | framework module MJRefresh { 2 | umbrella header "MJRefresh-umbrella.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | -------------------------------------------------------------------------------- /Pods/Target Support Files/MJRefresh/MJRefresh.release.xcconfig: -------------------------------------------------------------------------------- 1 | CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/MJRefresh 2 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 3 | PODS_BUILD_DIR = ${BUILD_DIR} 4 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 5 | PODS_ROOT = ${SRCROOT} 6 | PODS_TARGET_SRCROOT = ${PODS_ROOT}/MJRefresh 7 | PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} 8 | SKIP_INSTALL = YES 9 | USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES 10 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Moya/Moya-Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | ${EXECUTABLE_NAME} 9 | CFBundleIdentifier 10 | ${PRODUCT_BUNDLE_IDENTIFIER} 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | ${PRODUCT_NAME} 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 14.0.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | ${CURRENT_PROJECT_VERSION} 23 | NSPrincipalClass 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Moya/Moya-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_Moya : NSObject 3 | @end 4 | @implementation PodsDummy_Moya 5 | @end 6 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Moya/Moya-prefix.pch: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Moya/Moya-umbrella.h: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | 14 | FOUNDATION_EXPORT double MoyaVersionNumber; 15 | FOUNDATION_EXPORT const unsigned char MoyaVersionString[]; 16 | 17 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Moya/Moya.debug.xcconfig: -------------------------------------------------------------------------------- 1 | CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/Moya 2 | FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Alamofire" 3 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 4 | OTHER_LDFLAGS = $(inherited) -framework "Foundation" 5 | OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS -suppress-warnings 6 | PODS_BUILD_DIR = ${BUILD_DIR} 7 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 8 | PODS_ROOT = ${SRCROOT} 9 | PODS_TARGET_SRCROOT = ${PODS_ROOT}/Moya 10 | PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} 11 | SKIP_INSTALL = YES 12 | USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES 13 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Moya/Moya.modulemap: -------------------------------------------------------------------------------- 1 | framework module Moya { 2 | umbrella header "Moya-umbrella.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Moya/Moya.release.xcconfig: -------------------------------------------------------------------------------- 1 | CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/Moya 2 | FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Alamofire" 3 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 4 | OTHER_LDFLAGS = $(inherited) -framework "Foundation" 5 | OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS -suppress-warnings 6 | PODS_BUILD_DIR = ${BUILD_DIR} 7 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 8 | PODS_ROOT = ${SRCROOT} 9 | PODS_TARGET_SRCROOT = ${PODS_ROOT}/Moya 10 | PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} 11 | SKIP_INSTALL = YES 12 | USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES 13 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-Shop/Pods-Shop-Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | ${EXECUTABLE_NAME} 9 | CFBundleIdentifier 10 | ${PRODUCT_BUNDLE_IDENTIFIER} 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | ${PRODUCT_NAME} 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 1.0.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | ${CURRENT_PROJECT_VERSION} 23 | NSPrincipalClass 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-Shop/Pods-Shop-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_Pods_Shop : NSObject 3 | @end 4 | @implementation PodsDummy_Pods_Shop 5 | @end 6 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-Shop/Pods-Shop-frameworks-Debug-input-files.xcfilelist: -------------------------------------------------------------------------------- 1 | ${PODS_ROOT}/Target Support Files/Pods-Shop/Pods-Shop-frameworks.sh 2 | ${BUILT_PRODUCTS_DIR}/Alamofire/Alamofire.framework 3 | ${BUILT_PRODUCTS_DIR}/HandyJSON/HandyJSON.framework 4 | ${BUILT_PRODUCTS_DIR}/MJRefresh/MJRefresh.framework 5 | ${BUILT_PRODUCTS_DIR}/Moya/Moya.framework 6 | ${BUILT_PRODUCTS_DIR}/SnapKit/SnapKit.framework -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-Shop/Pods-Shop-frameworks-Debug-output-files.xcfilelist: -------------------------------------------------------------------------------- 1 | ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Alamofire.framework 2 | ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/HandyJSON.framework 3 | ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/MJRefresh.framework 4 | ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Moya.framework 5 | ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SnapKit.framework -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-Shop/Pods-Shop-frameworks-Release-input-files.xcfilelist: -------------------------------------------------------------------------------- 1 | ${PODS_ROOT}/Target Support Files/Pods-Shop/Pods-Shop-frameworks.sh 2 | ${BUILT_PRODUCTS_DIR}/Alamofire/Alamofire.framework 3 | ${BUILT_PRODUCTS_DIR}/HandyJSON/HandyJSON.framework 4 | ${BUILT_PRODUCTS_DIR}/MJRefresh/MJRefresh.framework 5 | ${BUILT_PRODUCTS_DIR}/Moya/Moya.framework 6 | ${BUILT_PRODUCTS_DIR}/SnapKit/SnapKit.framework -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-Shop/Pods-Shop-frameworks-Release-output-files.xcfilelist: -------------------------------------------------------------------------------- 1 | ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Alamofire.framework 2 | ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/HandyJSON.framework 3 | ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/MJRefresh.framework 4 | ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Moya.framework 5 | ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SnapKit.framework -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-Shop/Pods-Shop-umbrella.h: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | 14 | FOUNDATION_EXPORT double Pods_ShopVersionNumber; 15 | FOUNDATION_EXPORT const unsigned char Pods_ShopVersionString[]; 16 | 17 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-Shop/Pods-Shop.debug.xcconfig: -------------------------------------------------------------------------------- 1 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES 2 | FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Alamofire" "${PODS_CONFIGURATION_BUILD_DIR}/HandyJSON" "${PODS_CONFIGURATION_BUILD_DIR}/MJRefresh" "${PODS_CONFIGURATION_BUILD_DIR}/Moya" "${PODS_CONFIGURATION_BUILD_DIR}/SnapKit" 3 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 4 | HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Alamofire/Alamofire.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/HandyJSON/HandyJSON.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/MJRefresh/MJRefresh.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Moya/Moya.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SnapKit/SnapKit.framework/Headers" 5 | LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' 6 | OTHER_CFLAGS = $(inherited) -isystem "${PODS_CONFIGURATION_BUILD_DIR}/Alamofire/Alamofire.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/HandyJSON/HandyJSON.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/MJRefresh/MJRefresh.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/Moya/Moya.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/SnapKit/SnapKit.framework/Headers" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/Alamofire" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/HandyJSON" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/MJRefresh" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/Moya" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/SnapKit" 7 | OTHER_LDFLAGS = $(inherited) -framework "Alamofire" -framework "CFNetwork" -framework "Foundation" -framework "HandyJSON" -framework "MJRefresh" -framework "Moya" -framework "SnapKit" 8 | OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS 9 | PODS_BUILD_DIR = ${BUILD_DIR} 10 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 11 | PODS_PODFILE_DIR_PATH = ${SRCROOT}/. 12 | PODS_ROOT = ${SRCROOT}/Pods 13 | USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES 14 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-Shop/Pods-Shop.modulemap: -------------------------------------------------------------------------------- 1 | framework module Pods_Shop { 2 | umbrella header "Pods-Shop-umbrella.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-Shop/Pods-Shop.release.xcconfig: -------------------------------------------------------------------------------- 1 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES 2 | FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Alamofire" "${PODS_CONFIGURATION_BUILD_DIR}/HandyJSON" "${PODS_CONFIGURATION_BUILD_DIR}/MJRefresh" "${PODS_CONFIGURATION_BUILD_DIR}/Moya" "${PODS_CONFIGURATION_BUILD_DIR}/SnapKit" 3 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 4 | HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Alamofire/Alamofire.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/HandyJSON/HandyJSON.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/MJRefresh/MJRefresh.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Moya/Moya.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SnapKit/SnapKit.framework/Headers" 5 | LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' 6 | OTHER_CFLAGS = $(inherited) -isystem "${PODS_CONFIGURATION_BUILD_DIR}/Alamofire/Alamofire.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/HandyJSON/HandyJSON.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/MJRefresh/MJRefresh.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/Moya/Moya.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/SnapKit/SnapKit.framework/Headers" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/Alamofire" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/HandyJSON" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/MJRefresh" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/Moya" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/SnapKit" 7 | OTHER_LDFLAGS = $(inherited) -framework "Alamofire" -framework "CFNetwork" -framework "Foundation" -framework "HandyJSON" -framework "MJRefresh" -framework "Moya" -framework "SnapKit" 8 | OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS 9 | PODS_BUILD_DIR = ${BUILD_DIR} 10 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 11 | PODS_PODFILE_DIR_PATH = ${SRCROOT}/. 12 | PODS_ROOT = ${SRCROOT}/Pods 13 | USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES 14 | -------------------------------------------------------------------------------- /Pods/Target Support Files/SnapKit/SnapKit-Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | ${EXECUTABLE_NAME} 9 | CFBundleIdentifier 10 | ${PRODUCT_BUNDLE_IDENTIFIER} 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | ${PRODUCT_NAME} 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 5.0.1 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | ${CURRENT_PROJECT_VERSION} 23 | NSPrincipalClass 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /Pods/Target Support Files/SnapKit/SnapKit-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_SnapKit : NSObject 3 | @end 4 | @implementation PodsDummy_SnapKit 5 | @end 6 | -------------------------------------------------------------------------------- /Pods/Target Support Files/SnapKit/SnapKit-prefix.pch: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | -------------------------------------------------------------------------------- /Pods/Target Support Files/SnapKit/SnapKit-umbrella.h: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | 14 | FOUNDATION_EXPORT double SnapKitVersionNumber; 15 | FOUNDATION_EXPORT const unsigned char SnapKitVersionString[]; 16 | 17 | -------------------------------------------------------------------------------- /Pods/Target Support Files/SnapKit/SnapKit.debug.xcconfig: -------------------------------------------------------------------------------- 1 | CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/SnapKit 2 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 3 | OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS -suppress-warnings 4 | PODS_BUILD_DIR = ${BUILD_DIR} 5 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 6 | PODS_ROOT = ${SRCROOT} 7 | PODS_TARGET_SRCROOT = ${PODS_ROOT}/SnapKit 8 | PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} 9 | SKIP_INSTALL = YES 10 | USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES 11 | -------------------------------------------------------------------------------- /Pods/Target Support Files/SnapKit/SnapKit.modulemap: -------------------------------------------------------------------------------- 1 | framework module SnapKit { 2 | umbrella header "SnapKit-umbrella.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | -------------------------------------------------------------------------------- /Pods/Target Support Files/SnapKit/SnapKit.release.xcconfig: -------------------------------------------------------------------------------- 1 | CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/SnapKit 2 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 3 | OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS -suppress-warnings 4 | PODS_BUILD_DIR = ${BUILD_DIR} 5 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 6 | PODS_ROOT = ${SRCROOT} 7 | PODS_TARGET_SRCROOT = ${PODS_ROOT}/SnapKit 8 | PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} 9 | SKIP_INSTALL = YES 10 | USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES 11 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Shop 2 | 3 | 业余时间独立开发的Swift电商项目 4 | 5 | 已经更新适配Xcode12.2(Swift5) 6 | 7 | 旨在熟练Swift开发,方便大家一起交流学习 8 | 9 | - 自定义的各种布局控件 10 | 11 | - 各种基础类,三方类的扩展 12 | 13 | - Swift和OC混合开发 14 | 15 | - MVC架构清晰 16 | 17 | - 三方框架SnapKit,Moya, Alamofire, HandyJSON, Kingfisher,MJRefresh 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 感谢 [oursketch](https://oursketch.com) 提供UI原型 32 | 33 | 如有侵权,造成影响,请联系本人删除 -------------------------------------------------------------------------------- /Shop.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Shop.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /Shop.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /Shop.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /Shop/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/developRen/Shop/20237b60e26ce78fb2c622ab285b886402fa2bb6/Shop/.DS_Store -------------------------------------------------------------------------------- /Shop/Home/Controller/RYJHomeViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // RYJHomeViewController.swift 3 | // Shop 4 | // 5 | // Created by 任一杰 on 2020/12/14. 6 | // 7 | 8 | import UIKit 9 | 10 | class RYJHomeViewController: RYJBaseViewController { 11 | 12 | lazy var bannerView: RYJHomeBannerView = { 13 | let bannerView = RYJHomeBannerView.init(frame: CGRect.zero) 14 | return bannerView 15 | }() 16 | 17 | lazy var likeView: RYJHomeLikeView = { 18 | let likeView = RYJHomeLikeView.init(frame: CGRect.zero) 19 | return likeView 20 | }() 21 | 22 | override func viewDidLoad() { 23 | super.viewDidLoad() 24 | 25 | self.titleLabel.text = "New Collection" 26 | 27 | bannerView.didSelectBlock = { 28 | [weak self] in 29 | _ = $0.row 30 | let detailVC = RYJDetailViewController.init() 31 | detailVC.modalPresentationStyle = .fullScreen 32 | self?.present(detailVC, animated: true, completion: {}) 33 | } 34 | self.view.addSubview(bannerView) 35 | self.view.sendSubviewToBack(bannerView) 36 | bannerView.snp.makeConstraints { 37 | $0.left.top.right.equalTo(self.view) 38 | $0.height.equalTo(457) 39 | } 40 | 41 | self.view.addSubview(likeView) 42 | likeView.snp.makeConstraints { 43 | $0.left.right.equalTo(self.view) 44 | $0.top.equalTo(self.bannerView.snp.bottom).offset(10) 45 | $0.height.equalTo(250) 46 | } 47 | 48 | 49 | } 50 | 51 | } 52 | 53 | -------------------------------------------------------------------------------- /Shop/Home/Model/RYJHomeModel.swift: -------------------------------------------------------------------------------- 1 | // 2 | // RYJHomeModel.swift 3 | // Shop 4 | // 5 | // Created by 任一杰 on 2020/12/24. 6 | // 7 | 8 | import Foundation 9 | 10 | struct RYJHomeLikeModel { 11 | // 产品图片 12 | var pdImage: String? 13 | // 产品名 14 | var pdName: String? 15 | // 产品品牌 16 | var pdBrand: String? 17 | // 是否喜欢 18 | var isLike: Bool = false 19 | 20 | init(pdImage: String, 21 | pdName: String, 22 | pdBrand: String, 23 | isLike: Bool) { 24 | self.pdImage = pdImage 25 | self.pdName = pdName 26 | self.pdBrand = pdBrand 27 | self.isLike = isLike 28 | } 29 | 30 | static func defaultData() -> Array { 31 | let product_1 = RYJHomeLikeModel.init(pdImage: "home_like_product_1", 32 | pdName: "Jacket in blue denim", 33 | pdBrand: "Wrangler", 34 | isLike: false) 35 | 36 | let product_2 = RYJHomeLikeModel.init(pdImage: "home_like_product_2", 37 | pdName: "Vans denim jacket", 38 | pdBrand: "GUCCI", 39 | isLike: false) 40 | 41 | let product_3 = RYJHomeLikeModel.init(pdImage: "home_like_product_1", 42 | pdName: "Jacket in blue denim", 43 | pdBrand: "Wrangler", 44 | isLike: false) 45 | 46 | let product_4 = RYJHomeLikeModel.init(pdImage: "home_like_product_2", 47 | pdName: "Vans denim jacket", 48 | pdBrand: "GUCCI", 49 | isLike: false) 50 | return [product_1, product_2, product_3, product_4] 51 | } 52 | 53 | } 54 | -------------------------------------------------------------------------------- /Shop/Like/RYJLikeViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // RYJLikeViewController.swift 3 | // Shop 4 | // 5 | // Created by 任一杰 on 2020/12/15. 6 | // 7 | 8 | import UIKit 9 | 10 | class RYJLikeViewController: RYJBaseViewController { 11 | 12 | var weatherData: weather? = nil 13 | var lifeData: life? = nil 14 | 15 | override func viewDidLoad() { 16 | super.viewDidLoad() 17 | 18 | self.titleLabel.text = "Like" 19 | } 20 | 21 | override func touchesBegan(_ touches: Set, with event: UIEvent?) { 22 | getWeatherData() 23 | getLifeData() 24 | } 25 | 26 | func getWeatherData() { 27 | RYJShopProvider.request(.weather) { [self] result in 28 | if case let .success(response) = result { 29 | // 解析数据 30 | let jsonString = String(data: response.data, encoding: .utf8) 31 | weatherData = weather.deserialize(from: jsonString, designatedPath: "result") 32 | } 33 | } 34 | } 35 | 36 | func getLifeData() { 37 | RYJShopProvider.request(.life) { [self] result in 38 | if case let .success(response) = result { 39 | // 解析数据 40 | let jsonString = String(data: response.data, encoding: .utf8) 41 | lifeData = life.deserialize(from: jsonString, designatedPath: "result.life") 42 | } 43 | } 44 | } 45 | } 46 | -------------------------------------------------------------------------------- /Shop/Resources/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/developRen/Shop/20237b60e26ce78fb2c622ab285b886402fa2bb6/Shop/Resources/.DS_Store -------------------------------------------------------------------------------- /Shop/Resources/Assets.xcassets/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/developRen/Shop/20237b60e26ce78fb2c622ab285b886402fa2bb6/Shop/Resources/Assets.xcassets/.DS_Store -------------------------------------------------------------------------------- /Shop/Resources/Assets.xcassets/AccentColor.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "colors" : [ 3 | { 4 | "idiom" : "universal" 5 | } 6 | ], 7 | "info" : { 8 | "author" : "xcode", 9 | "version" : 1 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /Shop/Resources/Assets.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "iphone", 5 | "scale" : "2x", 6 | "size" : "20x20" 7 | }, 8 | { 9 | "idiom" : "iphone", 10 | "scale" : "3x", 11 | "size" : "20x20" 12 | }, 13 | { 14 | "idiom" : "iphone", 15 | "scale" : "2x", 16 | "size" : "29x29" 17 | }, 18 | { 19 | "idiom" : "iphone", 20 | "scale" : "3x", 21 | "size" : "29x29" 22 | }, 23 | { 24 | "idiom" : "iphone", 25 | "scale" : "2x", 26 | "size" : "40x40" 27 | }, 28 | { 29 | "idiom" : "iphone", 30 | "scale" : "3x", 31 | "size" : "40x40" 32 | }, 33 | { 34 | "idiom" : "iphone", 35 | "scale" : "2x", 36 | "size" : "60x60" 37 | }, 38 | { 39 | "idiom" : "iphone", 40 | "scale" : "3x", 41 | "size" : "60x60" 42 | }, 43 | { 44 | "idiom" : "ipad", 45 | "scale" : "1x", 46 | "size" : "20x20" 47 | }, 48 | { 49 | "idiom" : "ipad", 50 | "scale" : "2x", 51 | "size" : "20x20" 52 | }, 53 | { 54 | "idiom" : "ipad", 55 | "scale" : "1x", 56 | "size" : "29x29" 57 | }, 58 | { 59 | "idiom" : "ipad", 60 | "scale" : "2x", 61 | "size" : "29x29" 62 | }, 63 | { 64 | "idiom" : "ipad", 65 | "scale" : "1x", 66 | "size" : "40x40" 67 | }, 68 | { 69 | "idiom" : "ipad", 70 | "scale" : "2x", 71 | "size" : "40x40" 72 | }, 73 | { 74 | "idiom" : "ipad", 75 | "scale" : "1x", 76 | "size" : "76x76" 77 | }, 78 | { 79 | "idiom" : "ipad", 80 | "scale" : "2x", 81 | "size" : "76x76" 82 | }, 83 | { 84 | "idiom" : "ipad", 85 | "scale" : "2x", 86 | "size" : "83.5x83.5" 87 | }, 88 | { 89 | "idiom" : "ios-marketing", 90 | "scale" : "1x", 91 | "size" : "1024x1024" 92 | } 93 | ], 94 | "info" : { 95 | "author" : "xcode", 96 | "version" : 1 97 | } 98 | } 99 | -------------------------------------------------------------------------------- /Shop/Resources/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /Shop/Resources/Assets.xcassets/base/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /Shop/Resources/Assets.xcassets/base/base_share.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "share@2x.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "filename" : "share@3x.png", 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "author" : "xcode", 20 | "version" : 1 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /Shop/Resources/Assets.xcassets/base/base_share.imageset/share@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/developRen/Shop/20237b60e26ce78fb2c622ab285b886402fa2bb6/Shop/Resources/Assets.xcassets/base/base_share.imageset/share@2x.png -------------------------------------------------------------------------------- /Shop/Resources/Assets.xcassets/base/base_share.imageset/share@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/developRen/Shop/20237b60e26ce78fb2c622ab285b886402fa2bb6/Shop/Resources/Assets.xcassets/base/base_share.imageset/share@3x.png -------------------------------------------------------------------------------- /Shop/Resources/Assets.xcassets/base/basel_close.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "close@2x.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "filename" : "close@3x.png", 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "author" : "xcode", 20 | "version" : 1 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /Shop/Resources/Assets.xcassets/base/basel_close.imageset/close@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/developRen/Shop/20237b60e26ce78fb2c622ab285b886402fa2bb6/Shop/Resources/Assets.xcassets/base/basel_close.imageset/close@2x.png -------------------------------------------------------------------------------- /Shop/Resources/Assets.xcassets/base/basel_close.imageset/close@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/developRen/Shop/20237b60e26ce78fb2c622ab285b886402fa2bb6/Shop/Resources/Assets.xcassets/base/basel_close.imageset/close@3x.png -------------------------------------------------------------------------------- /Shop/Resources/Assets.xcassets/base/user_icon.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "search@2x.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "filename" : "search@3x.png", 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "author" : "xcode", 20 | "version" : 1 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /Shop/Resources/Assets.xcassets/base/user_icon.imageset/search@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/developRen/Shop/20237b60e26ce78fb2c622ab285b886402fa2bb6/Shop/Resources/Assets.xcassets/base/user_icon.imageset/search@2x.png -------------------------------------------------------------------------------- /Shop/Resources/Assets.xcassets/base/user_icon.imageset/search@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/developRen/Shop/20237b60e26ce78fb2c622ab285b886402fa2bb6/Shop/Resources/Assets.xcassets/base/user_icon.imageset/search@3x.png -------------------------------------------------------------------------------- /Shop/Resources/Assets.xcassets/cart/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /Shop/Resources/Assets.xcassets/cart/cart_discount_bg.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "cart_discount_bg@2x.png", 9 | "idiom" : "universal", 10 | "resizing" : { 11 | "cap-insets" : { 12 | "bottom" : 80, 13 | "left" : 16, 14 | "right" : 166, 15 | "top" : 79 16 | }, 17 | "center" : { 18 | "height" : 1, 19 | "mode" : "tile", 20 | "width" : 1 21 | }, 22 | "mode" : "9-part" 23 | }, 24 | "scale" : "2x" 25 | }, 26 | { 27 | "filename" : "cart_discount_bg@3x.png", 28 | "idiom" : "universal", 29 | "resizing" : { 30 | "cap-insets" : { 31 | "bottom" : 120, 32 | "left" : 24, 33 | "right" : 249, 34 | "top" : 119 35 | }, 36 | "center" : { 37 | "height" : 1, 38 | "mode" : "tile", 39 | "width" : 1 40 | }, 41 | "mode" : "9-part" 42 | }, 43 | "scale" : "3x" 44 | } 45 | ], 46 | "info" : { 47 | "author" : "xcode", 48 | "version" : 1 49 | } 50 | } 51 | -------------------------------------------------------------------------------- /Shop/Resources/Assets.xcassets/cart/cart_discount_bg.imageset/cart_discount_bg@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/developRen/Shop/20237b60e26ce78fb2c622ab285b886402fa2bb6/Shop/Resources/Assets.xcassets/cart/cart_discount_bg.imageset/cart_discount_bg@2x.png -------------------------------------------------------------------------------- /Shop/Resources/Assets.xcassets/cart/cart_discount_bg.imageset/cart_discount_bg@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/developRen/Shop/20237b60e26ce78fb2c622ab285b886402fa2bb6/Shop/Resources/Assets.xcassets/cart/cart_discount_bg.imageset/cart_discount_bg@3x.png -------------------------------------------------------------------------------- /Shop/Resources/Assets.xcassets/cart/cart_gift.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "cart_gift@2x.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "filename" : "cart_gift@3x.png", 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "author" : "xcode", 20 | "version" : 1 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /Shop/Resources/Assets.xcassets/cart/cart_gift.imageset/cart_gift@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/developRen/Shop/20237b60e26ce78fb2c622ab285b886402fa2bb6/Shop/Resources/Assets.xcassets/cart/cart_gift.imageset/cart_gift@2x.png -------------------------------------------------------------------------------- /Shop/Resources/Assets.xcassets/cart/cart_gift.imageset/cart_gift@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/developRen/Shop/20237b60e26ce78fb2c622ab285b886402fa2bb6/Shop/Resources/Assets.xcassets/cart/cart_gift.imageset/cart_gift@3x.png -------------------------------------------------------------------------------- /Shop/Resources/Assets.xcassets/cart/cart_product_1.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "cart_product_1@2x.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "filename" : "cart_product_1@3x.png", 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "author" : "xcode", 20 | "version" : 1 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /Shop/Resources/Assets.xcassets/cart/cart_product_1.imageset/cart_product_1@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/developRen/Shop/20237b60e26ce78fb2c622ab285b886402fa2bb6/Shop/Resources/Assets.xcassets/cart/cart_product_1.imageset/cart_product_1@2x.png -------------------------------------------------------------------------------- /Shop/Resources/Assets.xcassets/cart/cart_product_1.imageset/cart_product_1@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/developRen/Shop/20237b60e26ce78fb2c622ab285b886402fa2bb6/Shop/Resources/Assets.xcassets/cart/cart_product_1.imageset/cart_product_1@3x.png -------------------------------------------------------------------------------- /Shop/Resources/Assets.xcassets/cart/cart_product_2.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "cart_product_2@2x.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "filename" : "cart_product_2@3x.png", 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "author" : "xcode", 20 | "version" : 1 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /Shop/Resources/Assets.xcassets/cart/cart_product_2.imageset/cart_product_2@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/developRen/Shop/20237b60e26ce78fb2c622ab285b886402fa2bb6/Shop/Resources/Assets.xcassets/cart/cart_product_2.imageset/cart_product_2@2x.png -------------------------------------------------------------------------------- /Shop/Resources/Assets.xcassets/cart/cart_product_2.imageset/cart_product_2@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/developRen/Shop/20237b60e26ce78fb2c622ab285b886402fa2bb6/Shop/Resources/Assets.xcassets/cart/cart_product_2.imageset/cart_product_2@3x.png -------------------------------------------------------------------------------- /Shop/Resources/Assets.xcassets/cart/cart_product_3.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "cart_product_3@2x.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "filename" : "cart_product_3@3x.png", 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "author" : "xcode", 20 | "version" : 1 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /Shop/Resources/Assets.xcassets/cart/cart_product_3.imageset/cart_product_3@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/developRen/Shop/20237b60e26ce78fb2c622ab285b886402fa2bb6/Shop/Resources/Assets.xcassets/cart/cart_product_3.imageset/cart_product_3@2x.png -------------------------------------------------------------------------------- /Shop/Resources/Assets.xcassets/cart/cart_product_3.imageset/cart_product_3@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/developRen/Shop/20237b60e26ce78fb2c622ab285b886402fa2bb6/Shop/Resources/Assets.xcassets/cart/cart_product_3.imageset/cart_product_3@3x.png -------------------------------------------------------------------------------- /Shop/Resources/Assets.xcassets/cart/cart_trash.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "cart_trash@2x.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "filename" : "cart_trash@3x.png", 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "author" : "xcode", 20 | "version" : 1 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /Shop/Resources/Assets.xcassets/cart/cart_trash.imageset/cart_trash@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/developRen/Shop/20237b60e26ce78fb2c622ab285b886402fa2bb6/Shop/Resources/Assets.xcassets/cart/cart_trash.imageset/cart_trash@2x.png -------------------------------------------------------------------------------- /Shop/Resources/Assets.xcassets/cart/cart_trash.imageset/cart_trash@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/developRen/Shop/20237b60e26ce78fb2c622ab285b886402fa2bb6/Shop/Resources/Assets.xcassets/cart/cart_trash.imageset/cart_trash@3x.png -------------------------------------------------------------------------------- /Shop/Resources/Assets.xcassets/checkout/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /Shop/Resources/Assets.xcassets/checkout/address_selected.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "address_selected@2x.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "filename" : "address_selected@3x.png", 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "author" : "xcode", 20 | "version" : 1 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /Shop/Resources/Assets.xcassets/checkout/address_selected.imageset/address_selected@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/developRen/Shop/20237b60e26ce78fb2c622ab285b886402fa2bb6/Shop/Resources/Assets.xcassets/checkout/address_selected.imageset/address_selected@2x.png -------------------------------------------------------------------------------- /Shop/Resources/Assets.xcassets/checkout/address_selected.imageset/address_selected@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/developRen/Shop/20237b60e26ce78fb2c622ab285b886402fa2bb6/Shop/Resources/Assets.xcassets/checkout/address_selected.imageset/address_selected@3x.png -------------------------------------------------------------------------------- /Shop/Resources/Assets.xcassets/checkout/address_unselected.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "address_unselected@2x.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "filename" : "address_unselected@3x.png", 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "author" : "xcode", 20 | "version" : 1 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /Shop/Resources/Assets.xcassets/checkout/address_unselected.imageset/address_unselected@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/developRen/Shop/20237b60e26ce78fb2c622ab285b886402fa2bb6/Shop/Resources/Assets.xcassets/checkout/address_unselected.imageset/address_unselected@2x.png -------------------------------------------------------------------------------- /Shop/Resources/Assets.xcassets/checkout/address_unselected.imageset/address_unselected@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/developRen/Shop/20237b60e26ce78fb2c622ab285b886402fa2bb6/Shop/Resources/Assets.xcassets/checkout/address_unselected.imageset/address_unselected@3x.png -------------------------------------------------------------------------------- /Shop/Resources/Assets.xcassets/checkout/checkout_track_1.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "checkout_track_1@2x.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "filename" : "checkout_track_1@3x.png", 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "author" : "xcode", 20 | "version" : 1 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /Shop/Resources/Assets.xcassets/checkout/checkout_track_1.imageset/checkout_track_1@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/developRen/Shop/20237b60e26ce78fb2c622ab285b886402fa2bb6/Shop/Resources/Assets.xcassets/checkout/checkout_track_1.imageset/checkout_track_1@2x.png -------------------------------------------------------------------------------- /Shop/Resources/Assets.xcassets/checkout/checkout_track_1.imageset/checkout_track_1@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/developRen/Shop/20237b60e26ce78fb2c622ab285b886402fa2bb6/Shop/Resources/Assets.xcassets/checkout/checkout_track_1.imageset/checkout_track_1@3x.png -------------------------------------------------------------------------------- /Shop/Resources/Assets.xcassets/checkout/checkout_track_2.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "checkout_track_2@2x.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "filename" : "checkout_track_2@3x.png", 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "author" : "xcode", 20 | "version" : 1 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /Shop/Resources/Assets.xcassets/checkout/checkout_track_2.imageset/checkout_track_2@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/developRen/Shop/20237b60e26ce78fb2c622ab285b886402fa2bb6/Shop/Resources/Assets.xcassets/checkout/checkout_track_2.imageset/checkout_track_2@2x.png -------------------------------------------------------------------------------- /Shop/Resources/Assets.xcassets/checkout/checkout_track_2.imageset/checkout_track_2@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/developRen/Shop/20237b60e26ce78fb2c622ab285b886402fa2bb6/Shop/Resources/Assets.xcassets/checkout/checkout_track_2.imageset/checkout_track_2@3x.png -------------------------------------------------------------------------------- /Shop/Resources/Assets.xcassets/checkout/freight_select.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "freight_select@2x.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "filename" : "freight_select@3x.png", 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "author" : "xcode", 20 | "version" : 1 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /Shop/Resources/Assets.xcassets/checkout/freight_select.imageset/freight_select@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/developRen/Shop/20237b60e26ce78fb2c622ab285b886402fa2bb6/Shop/Resources/Assets.xcassets/checkout/freight_select.imageset/freight_select@2x.png -------------------------------------------------------------------------------- /Shop/Resources/Assets.xcassets/checkout/freight_select.imageset/freight_select@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/developRen/Shop/20237b60e26ce78fb2c622ab285b886402fa2bb6/Shop/Resources/Assets.xcassets/checkout/freight_select.imageset/freight_select@3x.png -------------------------------------------------------------------------------- /Shop/Resources/Assets.xcassets/detail/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /Shop/Resources/Assets.xcassets/detail/detail_cotton.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "detail_cotton@2x.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "filename" : "detail_cotton@3x.png", 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "author" : "xcode", 20 | "version" : 1 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /Shop/Resources/Assets.xcassets/detail/detail_cotton.imageset/detail_cotton@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/developRen/Shop/20237b60e26ce78fb2c622ab285b886402fa2bb6/Shop/Resources/Assets.xcassets/detail/detail_cotton.imageset/detail_cotton@2x.png -------------------------------------------------------------------------------- /Shop/Resources/Assets.xcassets/detail/detail_cotton.imageset/detail_cotton@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/developRen/Shop/20237b60e26ce78fb2c622ab285b886402fa2bb6/Shop/Resources/Assets.xcassets/detail/detail_cotton.imageset/detail_cotton@3x.png -------------------------------------------------------------------------------- /Shop/Resources/Assets.xcassets/detail/detail_header.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "detail_header@2x.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "filename" : "detail_header@3x.png", 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "author" : "xcode", 20 | "version" : 1 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /Shop/Resources/Assets.xcassets/detail/detail_header.imageset/detail_header@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/developRen/Shop/20237b60e26ce78fb2c622ab285b886402fa2bb6/Shop/Resources/Assets.xcassets/detail/detail_header.imageset/detail_header@2x.png -------------------------------------------------------------------------------- /Shop/Resources/Assets.xcassets/detail/detail_header.imageset/detail_header@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/developRen/Shop/20237b60e26ce78fb2c622ab285b886402fa2bb6/Shop/Resources/Assets.xcassets/detail/detail_header.imageset/detail_header@3x.png -------------------------------------------------------------------------------- /Shop/Resources/Assets.xcassets/detail/detail_more_arrow.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "detail_more_arrow@2x.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "filename" : "detail_more_arrow@3x.png", 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "author" : "xcode", 20 | "version" : 1 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /Shop/Resources/Assets.xcassets/detail/detail_more_arrow.imageset/detail_more_arrow@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/developRen/Shop/20237b60e26ce78fb2c622ab285b886402fa2bb6/Shop/Resources/Assets.xcassets/detail/detail_more_arrow.imageset/detail_more_arrow@2x.png -------------------------------------------------------------------------------- /Shop/Resources/Assets.xcassets/detail/detail_more_arrow.imageset/detail_more_arrow@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/developRen/Shop/20237b60e26ce78fb2c622ab285b886402fa2bb6/Shop/Resources/Assets.xcassets/detail/detail_more_arrow.imageset/detail_more_arrow@3x.png -------------------------------------------------------------------------------- /Shop/Resources/Assets.xcassets/detail/detail_zan.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "detail_zan@2x.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "filename" : "detail_zan@3x.png", 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "author" : "xcode", 20 | "version" : 1 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /Shop/Resources/Assets.xcassets/detail/detail_zan.imageset/detail_zan@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/developRen/Shop/20237b60e26ce78fb2c622ab285b886402fa2bb6/Shop/Resources/Assets.xcassets/detail/detail_zan.imageset/detail_zan@2x.png -------------------------------------------------------------------------------- /Shop/Resources/Assets.xcassets/detail/detail_zan.imageset/detail_zan@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/developRen/Shop/20237b60e26ce78fb2c622ab285b886402fa2bb6/Shop/Resources/Assets.xcassets/detail/detail_zan.imageset/detail_zan@3x.png -------------------------------------------------------------------------------- /Shop/Resources/Assets.xcassets/home/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/developRen/Shop/20237b60e26ce78fb2c622ab285b886402fa2bb6/Shop/Resources/Assets.xcassets/home/.DS_Store -------------------------------------------------------------------------------- /Shop/Resources/Assets.xcassets/home/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /Shop/Resources/Assets.xcassets/home/home_banner.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "home_banner.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /Shop/Resources/Assets.xcassets/home/home_banner.imageset/home_banner.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/developRen/Shop/20237b60e26ce78fb2c622ab285b886402fa2bb6/Shop/Resources/Assets.xcassets/home/home_banner.imageset/home_banner.png -------------------------------------------------------------------------------- /Shop/Resources/Assets.xcassets/home/home_card.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "home_card@2x.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "filename" : "home_card@3x.png", 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "author" : "xcode", 20 | "version" : 1 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /Shop/Resources/Assets.xcassets/home/home_card.imageset/home_card@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/developRen/Shop/20237b60e26ce78fb2c622ab285b886402fa2bb6/Shop/Resources/Assets.xcassets/home/home_card.imageset/home_card@2x.png -------------------------------------------------------------------------------- /Shop/Resources/Assets.xcassets/home/home_card.imageset/home_card@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/developRen/Shop/20237b60e26ce78fb2c622ab285b886402fa2bb6/Shop/Resources/Assets.xcassets/home/home_card.imageset/home_card@3x.png -------------------------------------------------------------------------------- /Shop/Resources/Assets.xcassets/home/home_like_button.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "home_like@2x.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "filename" : "home_like@3x.png", 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "author" : "xcode", 20 | "version" : 1 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /Shop/Resources/Assets.xcassets/home/home_like_button.imageset/home_like@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/developRen/Shop/20237b60e26ce78fb2c622ab285b886402fa2bb6/Shop/Resources/Assets.xcassets/home/home_like_button.imageset/home_like@2x.png -------------------------------------------------------------------------------- /Shop/Resources/Assets.xcassets/home/home_like_button.imageset/home_like@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/developRen/Shop/20237b60e26ce78fb2c622ab285b886402fa2bb6/Shop/Resources/Assets.xcassets/home/home_like_button.imageset/home_like@3x.png -------------------------------------------------------------------------------- /Shop/Resources/Assets.xcassets/home/home_like_product_1.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "home_like_product_1@2x.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "filename" : "home_like_product_1@3x.png", 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "author" : "xcode", 20 | "version" : 1 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /Shop/Resources/Assets.xcassets/home/home_like_product_1.imageset/home_like_product_1@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/developRen/Shop/20237b60e26ce78fb2c622ab285b886402fa2bb6/Shop/Resources/Assets.xcassets/home/home_like_product_1.imageset/home_like_product_1@2x.png -------------------------------------------------------------------------------- /Shop/Resources/Assets.xcassets/home/home_like_product_1.imageset/home_like_product_1@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/developRen/Shop/20237b60e26ce78fb2c622ab285b886402fa2bb6/Shop/Resources/Assets.xcassets/home/home_like_product_1.imageset/home_like_product_1@3x.png -------------------------------------------------------------------------------- /Shop/Resources/Assets.xcassets/home/home_like_product_2.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "home_like_product_2@2x.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "filename" : "home_like_product_2@3x.png", 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "author" : "xcode", 20 | "version" : 1 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /Shop/Resources/Assets.xcassets/home/home_like_product_2.imageset/home_like_product_2@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/developRen/Shop/20237b60e26ce78fb2c622ab285b886402fa2bb6/Shop/Resources/Assets.xcassets/home/home_like_product_2.imageset/home_like_product_2@2x.png -------------------------------------------------------------------------------- /Shop/Resources/Assets.xcassets/home/home_like_product_2.imageset/home_like_product_2@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/developRen/Shop/20237b60e26ce78fb2c622ab285b886402fa2bb6/Shop/Resources/Assets.xcassets/home/home_like_product_2.imageset/home_like_product_2@3x.png -------------------------------------------------------------------------------- /Shop/Resources/Assets.xcassets/search/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /Shop/Resources/Assets.xcassets/search/rank_shirt.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "rank_shirt@2x.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "filename" : "rank_shirt@3x.png", 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "author" : "xcode", 20 | "version" : 1 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /Shop/Resources/Assets.xcassets/search/rank_shirt.imageset/rank_shirt@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/developRen/Shop/20237b60e26ce78fb2c622ab285b886402fa2bb6/Shop/Resources/Assets.xcassets/search/rank_shirt.imageset/rank_shirt@2x.png -------------------------------------------------------------------------------- /Shop/Resources/Assets.xcassets/search/rank_shirt.imageset/rank_shirt@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/developRen/Shop/20237b60e26ce78fb2c622ab285b886402fa2bb6/Shop/Resources/Assets.xcassets/search/rank_shirt.imageset/rank_shirt@3x.png -------------------------------------------------------------------------------- /Shop/Resources/Assets.xcassets/search/rank_shoes.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "rank_shoes@2x.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "filename" : "rank_shoes@3x.png", 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "author" : "xcode", 20 | "version" : 1 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /Shop/Resources/Assets.xcassets/search/rank_shoes.imageset/rank_shoes@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/developRen/Shop/20237b60e26ce78fb2c622ab285b886402fa2bb6/Shop/Resources/Assets.xcassets/search/rank_shoes.imageset/rank_shoes@2x.png -------------------------------------------------------------------------------- /Shop/Resources/Assets.xcassets/search/rank_shoes.imageset/rank_shoes@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/developRen/Shop/20237b60e26ce78fb2c622ab285b886402fa2bb6/Shop/Resources/Assets.xcassets/search/rank_shoes.imageset/rank_shoes@3x.png -------------------------------------------------------------------------------- /Shop/Resources/Assets.xcassets/search/rank_trousers.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "rank_trousers@2x.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "filename" : "rank_trousers@3x.png", 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "author" : "xcode", 20 | "version" : 1 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /Shop/Resources/Assets.xcassets/search/rank_trousers.imageset/rank_trousers@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/developRen/Shop/20237b60e26ce78fb2c622ab285b886402fa2bb6/Shop/Resources/Assets.xcassets/search/rank_trousers.imageset/rank_trousers@2x.png -------------------------------------------------------------------------------- /Shop/Resources/Assets.xcassets/search/rank_trousers.imageset/rank_trousers@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/developRen/Shop/20237b60e26ce78fb2c622ab285b886402fa2bb6/Shop/Resources/Assets.xcassets/search/rank_trousers.imageset/rank_trousers@3x.png -------------------------------------------------------------------------------- /Shop/Resources/Assets.xcassets/search/search_ad.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "search_ad@2x.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "filename" : "search_ad@3x.png", 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "author" : "xcode", 20 | "version" : 1 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /Shop/Resources/Assets.xcassets/search/search_ad.imageset/search_ad@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/developRen/Shop/20237b60e26ce78fb2c622ab285b886402fa2bb6/Shop/Resources/Assets.xcassets/search/search_ad.imageset/search_ad@2x.png -------------------------------------------------------------------------------- /Shop/Resources/Assets.xcassets/search/search_ad.imageset/search_ad@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/developRen/Shop/20237b60e26ce78fb2c622ab285b886402fa2bb6/Shop/Resources/Assets.xcassets/search/search_ad.imageset/search_ad@3x.png -------------------------------------------------------------------------------- /Shop/Resources/Assets.xcassets/search/search_recent_more.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "search_recent_more@2x.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "filename" : "search_recent_more@3x.png", 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "author" : "xcode", 20 | "version" : 1 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /Shop/Resources/Assets.xcassets/search/search_recent_more.imageset/search_recent_more@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/developRen/Shop/20237b60e26ce78fb2c622ab285b886402fa2bb6/Shop/Resources/Assets.xcassets/search/search_recent_more.imageset/search_recent_more@2x.png -------------------------------------------------------------------------------- /Shop/Resources/Assets.xcassets/search/search_recent_more.imageset/search_recent_more@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/developRen/Shop/20237b60e26ce78fb2c622ab285b886402fa2bb6/Shop/Resources/Assets.xcassets/search/search_recent_more.imageset/search_recent_more@3x.png -------------------------------------------------------------------------------- /Shop/Resources/Assets.xcassets/tabbar/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /Shop/Resources/Assets.xcassets/tabbar/normal/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /Shop/Resources/Assets.xcassets/tabbar/normal/tabbar_cart.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "tabbar_cart@2x.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "filename" : "tabbar_cart@3x.png", 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "author" : "xcode", 20 | "version" : 1 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /Shop/Resources/Assets.xcassets/tabbar/normal/tabbar_cart.imageset/tabbar_cart@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/developRen/Shop/20237b60e26ce78fb2c622ab285b886402fa2bb6/Shop/Resources/Assets.xcassets/tabbar/normal/tabbar_cart.imageset/tabbar_cart@2x.png -------------------------------------------------------------------------------- /Shop/Resources/Assets.xcassets/tabbar/normal/tabbar_cart.imageset/tabbar_cart@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/developRen/Shop/20237b60e26ce78fb2c622ab285b886402fa2bb6/Shop/Resources/Assets.xcassets/tabbar/normal/tabbar_cart.imageset/tabbar_cart@3x.png -------------------------------------------------------------------------------- /Shop/Resources/Assets.xcassets/tabbar/normal/tabbar_home.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "tabbar_home@2x.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "filename" : "tabbar_home@3x.png", 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "author" : "xcode", 20 | "version" : 1 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /Shop/Resources/Assets.xcassets/tabbar/normal/tabbar_home.imageset/tabbar_home@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/developRen/Shop/20237b60e26ce78fb2c622ab285b886402fa2bb6/Shop/Resources/Assets.xcassets/tabbar/normal/tabbar_home.imageset/tabbar_home@2x.png -------------------------------------------------------------------------------- /Shop/Resources/Assets.xcassets/tabbar/normal/tabbar_home.imageset/tabbar_home@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/developRen/Shop/20237b60e26ce78fb2c622ab285b886402fa2bb6/Shop/Resources/Assets.xcassets/tabbar/normal/tabbar_home.imageset/tabbar_home@3x.png -------------------------------------------------------------------------------- /Shop/Resources/Assets.xcassets/tabbar/normal/tabbar_like.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "tabbar_like@2x.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "filename" : "tabbar_like@3x.png", 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "author" : "xcode", 20 | "version" : 1 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /Shop/Resources/Assets.xcassets/tabbar/normal/tabbar_like.imageset/tabbar_like@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/developRen/Shop/20237b60e26ce78fb2c622ab285b886402fa2bb6/Shop/Resources/Assets.xcassets/tabbar/normal/tabbar_like.imageset/tabbar_like@2x.png -------------------------------------------------------------------------------- /Shop/Resources/Assets.xcassets/tabbar/normal/tabbar_like.imageset/tabbar_like@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/developRen/Shop/20237b60e26ce78fb2c622ab285b886402fa2bb6/Shop/Resources/Assets.xcassets/tabbar/normal/tabbar_like.imageset/tabbar_like@3x.png -------------------------------------------------------------------------------- /Shop/Resources/Assets.xcassets/tabbar/normal/tabbar_search.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "tabbar_serach@2x.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "filename" : "tabbar_serach@3x.png", 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "author" : "xcode", 20 | "version" : 1 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /Shop/Resources/Assets.xcassets/tabbar/normal/tabbar_search.imageset/tabbar_serach@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/developRen/Shop/20237b60e26ce78fb2c622ab285b886402fa2bb6/Shop/Resources/Assets.xcassets/tabbar/normal/tabbar_search.imageset/tabbar_serach@2x.png -------------------------------------------------------------------------------- /Shop/Resources/Assets.xcassets/tabbar/normal/tabbar_search.imageset/tabbar_serach@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/developRen/Shop/20237b60e26ce78fb2c622ab285b886402fa2bb6/Shop/Resources/Assets.xcassets/tabbar/normal/tabbar_search.imageset/tabbar_serach@3x.png -------------------------------------------------------------------------------- /Shop/Resources/Assets.xcassets/tabbar/select/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /Shop/Resources/Assets.xcassets/tabbar/select/tabbar_cart_sel.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "tabbar_cart_sel@2x.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "filename" : "tabbar_cart_sel@3x.png", 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "author" : "xcode", 20 | "version" : 1 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /Shop/Resources/Assets.xcassets/tabbar/select/tabbar_cart_sel.imageset/tabbar_cart_sel@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/developRen/Shop/20237b60e26ce78fb2c622ab285b886402fa2bb6/Shop/Resources/Assets.xcassets/tabbar/select/tabbar_cart_sel.imageset/tabbar_cart_sel@2x.png -------------------------------------------------------------------------------- /Shop/Resources/Assets.xcassets/tabbar/select/tabbar_cart_sel.imageset/tabbar_cart_sel@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/developRen/Shop/20237b60e26ce78fb2c622ab285b886402fa2bb6/Shop/Resources/Assets.xcassets/tabbar/select/tabbar_cart_sel.imageset/tabbar_cart_sel@3x.png -------------------------------------------------------------------------------- /Shop/Resources/Assets.xcassets/tabbar/select/tabbar_home_sel.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "tabbar_home_sel@2x.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "filename" : "tabbar_home_sel@3x.png", 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "author" : "xcode", 20 | "version" : 1 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /Shop/Resources/Assets.xcassets/tabbar/select/tabbar_home_sel.imageset/tabbar_home_sel@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/developRen/Shop/20237b60e26ce78fb2c622ab285b886402fa2bb6/Shop/Resources/Assets.xcassets/tabbar/select/tabbar_home_sel.imageset/tabbar_home_sel@2x.png -------------------------------------------------------------------------------- /Shop/Resources/Assets.xcassets/tabbar/select/tabbar_home_sel.imageset/tabbar_home_sel@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/developRen/Shop/20237b60e26ce78fb2c622ab285b886402fa2bb6/Shop/Resources/Assets.xcassets/tabbar/select/tabbar_home_sel.imageset/tabbar_home_sel@3x.png -------------------------------------------------------------------------------- /Shop/Resources/Assets.xcassets/tabbar/select/tabbar_like_sel.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "tabbar_like_sel@2x.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "filename" : "tabbar_like_sel@3x.png", 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "author" : "xcode", 20 | "version" : 1 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /Shop/Resources/Assets.xcassets/tabbar/select/tabbar_like_sel.imageset/tabbar_like_sel@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/developRen/Shop/20237b60e26ce78fb2c622ab285b886402fa2bb6/Shop/Resources/Assets.xcassets/tabbar/select/tabbar_like_sel.imageset/tabbar_like_sel@2x.png -------------------------------------------------------------------------------- /Shop/Resources/Assets.xcassets/tabbar/select/tabbar_like_sel.imageset/tabbar_like_sel@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/developRen/Shop/20237b60e26ce78fb2c622ab285b886402fa2bb6/Shop/Resources/Assets.xcassets/tabbar/select/tabbar_like_sel.imageset/tabbar_like_sel@3x.png -------------------------------------------------------------------------------- /Shop/Resources/Assets.xcassets/tabbar/select/tabbar_search_sel.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "tabbar_search_sel@2x.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "filename" : "tabbar_search_sel@3x.png", 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "author" : "xcode", 20 | "version" : 1 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /Shop/Resources/Assets.xcassets/tabbar/select/tabbar_search_sel.imageset/tabbar_search_sel@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/developRen/Shop/20237b60e26ce78fb2c622ab285b886402fa2bb6/Shop/Resources/Assets.xcassets/tabbar/select/tabbar_search_sel.imageset/tabbar_search_sel@2x.png -------------------------------------------------------------------------------- /Shop/Resources/Assets.xcassets/tabbar/select/tabbar_search_sel.imageset/tabbar_search_sel@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/developRen/Shop/20237b60e26ce78fb2c622ab285b886402fa2bb6/Shop/Resources/Assets.xcassets/tabbar/select/tabbar_search_sel.imageset/tabbar_search_sel@3x.png -------------------------------------------------------------------------------- /Shop/Resources/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 | -------------------------------------------------------------------------------- /Shop/Resources/Base.lproj/Main.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 | -------------------------------------------------------------------------------- /Shop/Resources/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | NSAppTransportSecurity 6 | 7 | NSAllowsArbitraryLoads 8 | 9 | 10 | CFBundleDevelopmentRegion 11 | $(DEVELOPMENT_LANGUAGE) 12 | CFBundleExecutable 13 | $(EXECUTABLE_NAME) 14 | CFBundleIdentifier 15 | $(PRODUCT_BUNDLE_IDENTIFIER) 16 | CFBundleInfoDictionaryVersion 17 | 6.0 18 | CFBundleName 19 | $(PRODUCT_NAME) 20 | CFBundlePackageType 21 | $(PRODUCT_BUNDLE_PACKAGE_TYPE) 22 | CFBundleShortVersionString 23 | 1.0 24 | CFBundleVersion 25 | 1 26 | LSRequiresIPhoneOS 27 | 28 | UIApplicationSupportsIndirectInputEvents 29 | 30 | UILaunchStoryboardName 31 | LaunchScreen 32 | UIMainStoryboardFile 33 | Main 34 | UIRequiredDeviceCapabilities 35 | 36 | armv7 37 | 38 | UISupportedInterfaceOrientations 39 | 40 | UIInterfaceOrientationPortrait 41 | UIInterfaceOrientationLandscapeLeft 42 | UIInterfaceOrientationLandscapeRight 43 | 44 | UISupportedInterfaceOrientations~ipad 45 | 46 | UIInterfaceOrientationPortrait 47 | UIInterfaceOrientationPortraitUpsideDown 48 | UIInterfaceOrientationLandscapeLeft 49 | UIInterfaceOrientationLandscapeRight 50 | 51 | 52 | 53 | -------------------------------------------------------------------------------- /Shop/Resources/ViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ViewController.swift 3 | // Shop 4 | // 5 | // Created by 任一杰 on 2020/12/14. 6 | // 7 | 8 | import UIKit 9 | 10 | class ViewController: UIViewController { 11 | 12 | override func viewDidLoad() { 13 | super.viewDidLoad() 14 | // Do any additional setup after loading the view. 15 | } 16 | 17 | 18 | } 19 | 20 | -------------------------------------------------------------------------------- /Shop/System/AppDelegate.swift: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate.swift 3 | // Shop 4 | // 5 | // Created by 任一杰 on 2020/12/14. 6 | // 7 | 8 | import UIKit 9 | 10 | @main 11 | class AppDelegate: UIResponder, UIApplicationDelegate { 12 | 13 | var window: UIWindow? 14 | 15 | func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { 16 | 17 | window = UIWindow(frame: UIScreen.main.bounds) 18 | window?.backgroundColor = UIColor.white 19 | window?.rootViewController = RYJTabBarController() 20 | window?.makeKeyAndVisible() 21 | return true 22 | } 23 | 24 | } 25 | 26 | -------------------------------------------------------------------------------- /Shop/System/Global.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Global.swift 3 | // Shop 4 | // 5 | // Created by 任一杰 on 2020/12/15. 6 | // 7 | 8 | import Foundation 9 | import SnapKit 10 | 11 | let screenWidth = UIScreen.main.bounds.width 12 | let screenHeight = UIScreen.main.bounds.height 13 | -------------------------------------------------------------------------------- /Shop/System/Network/RYJShopAPI.swift: -------------------------------------------------------------------------------- 1 | // 2 | // RYJShopAPI.swift 3 | // Shop 4 | // 5 | // Created by 任一杰 on 2021/1/5. 6 | // 7 | 8 | import Foundation 9 | import Moya 10 | 11 | // 初始化请求的provider 12 | let RYJShopProvider = MoyaProvider() 13 | 14 | // 请求分类 15 | public enum ShopAPI { 16 | case weather // 天气预报 17 | case life // 生活指数 18 | } 19 | 20 | // 请求配置 21 | extension ShopAPI: TargetType { 22 | public var baseURL: URL { 23 | switch self { 24 | case .weather, .life: 25 | return URL(string: "http://apis.juhe.cn")! 26 | } 27 | } 28 | 29 | public var path: String { 30 | switch self { 31 | case .weather: 32 | return "/simpleWeather/query" 33 | case .life: 34 | return "/simpleWeather/life" 35 | } 36 | } 37 | 38 | public var method: Moya.Method { 39 | switch self { 40 | case .weather: 41 | return .get 42 | case .life: 43 | return .post 44 | } 45 | } 46 | 47 | public var sampleData: Data { 48 | return "{}".data(using: String.Encoding.utf8)! 49 | } 50 | 51 | public var task: Task { 52 | switch self { 53 | case .weather: 54 | var params: [String: Any] = [:] 55 | params["city"] = "杭州" 56 | params["key"] = "db2a6f6882e7d01e640304aa97c6728b" 57 | return .requestParameters(parameters: params, encoding: URLEncoding.default) 58 | case .life: 59 | var params: [String: Any] = [:] 60 | params["city"] = "杭州" 61 | params["key"] = "db2a6f6882e7d01e640304aa97c6728b" 62 | return .requestParameters(parameters: params, encoding: URLEncoding.default) 63 | } 64 | } 65 | 66 | public var headers: [String : String]? { 67 | return nil 68 | } 69 | } 70 | 71 | 72 | 73 | -------------------------------------------------------------------------------- /Shop/System/Network/RYJShopModel.swift: -------------------------------------------------------------------------------- 1 | // 2 | // RYJShopModel.swift 3 | // Shop 4 | // 5 | // Created by 任一杰 on 2021/1/5. 6 | // 7 | 8 | import Foundation 9 | import HandyJSON 10 | 11 | class weather : HandyJSON { 12 | var city: String! // 城市 13 | var realtime: realtime! // 当前天气详情情况 14 | var future: Array! // 近5天天气情况 15 | 16 | required init() {} 17 | } 18 | 19 | class realtime : HandyJSON { 20 | var temperature: String! // 温度 21 | var humidity: String! // 湿度 22 | var info: String! // 天气情况,如:晴、多云 23 | var direct: String! // 风向 24 | var power: String! // 风力 25 | var aqi: String! // 空气质量指数 26 | 27 | required init() {} 28 | } 29 | 30 | class future : HandyJSON { 31 | var date: String! // 日期 32 | var temperature: String! // 温度,最低温/最高温 33 | var weather: String! // 天气情况,如:晴、多云 34 | var direct: String! // 风向 35 | 36 | required init() {} 37 | } 38 | 39 | class life : HandyJSON { 40 | var kongtiao: lifeExponent! // 空调开启 41 | var guomin: lifeExponent! // 过敏 42 | var shushidu: lifeExponent! // 舒适度 43 | var chuanyi: lifeExponent! // 穿衣 44 | var diaoyu: lifeExponent! // 钓鱼 45 | var ganmao: lifeExponent! // 感冒 46 | var ziwaixian: lifeExponent! // 紫外线 47 | var xiche: lifeExponent! // 洗车 48 | var yundong: lifeExponent! // 运动 49 | var daisan: lifeExponent! // 带伞 50 | 51 | 52 | required init() {} 53 | } 54 | 55 | class lifeExponent : HandyJSON { 56 | var v: String! // 指数 57 | var des: String! // 指数详情 58 | 59 | required init() {} 60 | } 61 | -------------------------------------------------------------------------------- /Shop/System/Refresh/RYJRefresh.swift: -------------------------------------------------------------------------------- 1 | // 2 | // RYJRefresh.swift 3 | // Shop 4 | // 5 | // Created by 任一杰 on 2020/12/21. 6 | // 7 | 8 | import UIKit 9 | import MJRefresh 10 | 11 | extension UIScrollView { 12 | var ryjHead: MJRefreshHeader { 13 | get { return mj_header! } 14 | set { mj_header = newValue } 15 | } 16 | 17 | var ryjFoot: MJRefreshFooter { 18 | get { return mj_footer! } 19 | set { mj_footer = newValue } 20 | } 21 | } 22 | 23 | class RYJRefreshNormalHeader: MJRefreshNormalHeader {} 24 | -------------------------------------------------------------------------------- /ShopTests/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 | 22 | 23 | -------------------------------------------------------------------------------- /ShopTests/ShopTests.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ShopTests.swift 3 | // ShopTests 4 | // 5 | // Created by 任一杰 on 2020/12/14. 6 | // 7 | 8 | import XCTest 9 | @testable import Shop 10 | 11 | class ShopTests: XCTestCase { 12 | 13 | override func setUpWithError() throws { 14 | // Put setup code here. This method is called before the invocation of each test method in the class. 15 | } 16 | 17 | override func tearDownWithError() throws { 18 | // Put teardown code here. This method is called after the invocation of each test method in the class. 19 | } 20 | 21 | func testExample() throws { 22 | // This is an example of a functional test case. 23 | // Use XCTAssert and related functions to verify your tests produce the correct results. 24 | } 25 | 26 | func testPerformanceExample() throws { 27 | // This is an example of a performance test case. 28 | self.measure { 29 | // Put the code you want to measure the time of here. 30 | } 31 | } 32 | 33 | } 34 | -------------------------------------------------------------------------------- /ShopUITests/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 | 22 | 23 | -------------------------------------------------------------------------------- /ShopUITests/ShopUITests.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ShopUITests.swift 3 | // ShopUITests 4 | // 5 | // Created by 任一杰 on 2020/12/14. 6 | // 7 | 8 | import XCTest 9 | 10 | class ShopUITests: XCTestCase { 11 | 12 | override func setUpWithError() throws { 13 | // Put setup code here. This method is called before the invocation of each test method in the class. 14 | 15 | // In UI tests it is usually best to stop immediately when a failure occurs. 16 | continueAfterFailure = false 17 | 18 | // In UI tests it’s important to set the initial state - such as interface orientation - required for your tests before they run. The setUp method is a good place to do this. 19 | } 20 | 21 | override func tearDownWithError() throws { 22 | // Put teardown code here. This method is called after the invocation of each test method in the class. 23 | } 24 | 25 | func testExample() throws { 26 | // UI tests must launch the application that they test. 27 | let app = XCUIApplication() 28 | app.launch() 29 | 30 | // Use recording to get started writing UI tests. 31 | // Use XCTAssert and related functions to verify your tests produce the correct results. 32 | } 33 | 34 | func testLaunchPerformance() throws { 35 | if #available(macOS 10.15, iOS 13.0, tvOS 13.0, *) { 36 | // This measures how long it takes to launch your application. 37 | measure(metrics: [XCTApplicationLaunchMetric()]) { 38 | XCUIApplication().launch() 39 | } 40 | } 41 | } 42 | } 43 | --------------------------------------------------------------------------------