├── .gitignore ├── .swiftpm └── xcode │ └── package.xcworkspace │ └── contents.xcworkspacedata ├── Example ├── JKSwiftExtension.xcodeproj │ ├── project.pbxproj │ ├── project.xcworkspace │ │ ├── contents.xcworkspacedata │ │ └── xcshareddata │ │ │ └── IDEWorkspaceChecks.plist │ └── xcshareddata │ │ └── xcschemes │ │ └── JKSwiftExtension-Example.xcscheme ├── JKSwiftExtension.xcworkspace │ ├── contents.xcworkspacedata │ └── xcshareddata │ │ └── IDEWorkspaceChecks.plist ├── JKSwiftExtension │ ├── AppDelegate.swift │ ├── Base.lproj │ │ ├── LaunchScreen.xib │ │ └── Main.storyboard │ ├── CashCow.bundle │ │ ├── GuideX_1.png │ │ ├── GuideX_2.png │ │ └── GuideX_3.png │ ├── Class │ │ ├── Base │ │ │ ├── BaseHeaderView.swift │ │ │ ├── BaseNavigationViewController.swift │ │ │ ├── BaseViewCell.swift │ │ │ └── BaseViewController.swift │ │ ├── FoundationExtensionViewController │ │ │ ├── Controller │ │ │ │ ├── AVAssetExportSessionExtensionViewController.swift │ │ │ │ ├── ArrayExtensionViewController.swift │ │ │ │ ├── BoolExtensionViewController.swift │ │ │ │ ├── BundleExtensionViewController.swift │ │ │ │ ├── CGFloatExtensionViewController.swift │ │ │ │ ├── CGPointExtensionViewController.swift │ │ │ │ ├── CLLocationExtensionViewController.swift │ │ │ │ ├── CharacterExtensionViewController.swift │ │ │ │ ├── DataExtensionViewController.swift │ │ │ │ ├── DateExtensionViewController.swift │ │ │ │ ├── DateFormatterExtensionViewController.swift │ │ │ │ ├── DictionaryExtensionViewController.swift │ │ │ │ ├── DispatchQueueExtensionViewController.swift │ │ │ │ ├── DoubleExtensionViewController.swift │ │ │ │ ├── FileManagerExtensionViewController.swift │ │ │ │ ├── FloatExtensionViewController.swift │ │ │ │ ├── FoundationExtensionViewController.swift │ │ │ │ ├── IndexPathExtensionViewController.swift │ │ │ │ ├── Int64ExtensionViewController.swift │ │ │ │ ├── IntExtensionViewController.swift │ │ │ │ ├── NSAttributedStringExtensionViewController.swift │ │ │ │ ├── NSDecimalNumberExtensionViewController.swift │ │ │ │ ├── NSDecimalNumberHandlerExtensionViewController.swift │ │ │ │ ├── NSIndexPathExtensionViewController.swift │ │ │ │ ├── NSMutableAttributedStringExtensionViewController.swift │ │ │ │ ├── NSObjectExtensionViewController.swift │ │ │ │ ├── NSRangeExtensionViewController.swift │ │ │ │ ├── NumberFormatterExtensionViewController.swift │ │ │ │ ├── RangeExtensionViewController.swift │ │ │ │ ├── StringExtensionViewController.swift │ │ │ │ ├── TimerExtensionViewController.swift │ │ │ │ ├── UIDeviceExtensionViewController.swift │ │ │ │ ├── UIFontExtensionViewController.swift │ │ │ │ ├── UIntExtensionViewController.swift │ │ │ │ ├── URLExtensionViewController.swift │ │ │ │ └── UserDefaultsExtensionViewController.swift │ │ │ └── Model │ │ │ │ └── UserDefaultsModel.swift │ │ ├── ProtocolViewController │ │ │ ├── Controller │ │ │ │ ├── JKEmitterableViewController.swift │ │ │ │ ├── JKJSONViewController.swift │ │ │ │ ├── NibLoadableViewController.swift │ │ │ │ ├── OptionalViewController.swift │ │ │ │ └── ProtocolViewController.swift │ │ │ └── View │ │ │ │ ├── TestView.swift │ │ │ │ └── TestView.xib │ │ ├── SmallToolsViewController │ │ │ ├── Controller │ │ │ │ ├── JKAlertViewControllerViewController.swift │ │ │ │ ├── JKAsyncsViewController.swift │ │ │ │ ├── JKCircleProgressViewViewController.swift │ │ │ │ ├── JKCommonToolViewController.swift │ │ │ │ ├── JKContentSizeViewController.swift │ │ │ │ ├── JKCustomPickViewViewController.swift │ │ │ │ ├── JKDarkModeUtilViewController.swift │ │ │ │ ├── JKDrawSignatureViewViewController.swift │ │ │ │ ├── JKFileLogViewController.swift │ │ │ │ ├── JKGlobalToolsViewController.swift │ │ │ │ ├── JKOperatorViewController.swift │ │ │ │ ├── JKPaddingLabelViewController.swift │ │ │ │ ├── JKPanViewViewController.swift │ │ │ │ ├── JKPhotoAlbumUtilViewController.swift │ │ │ │ ├── JKPlaceHolderTextViewViewController.swift │ │ │ │ ├── JKPrintViewController.swift │ │ │ │ ├── JKRegexHelperViewController.swift │ │ │ │ ├── JKRollingNoticeViewViewController.swift │ │ │ │ ├── JKRuntimeViewController.swift │ │ │ │ ├── JKScreenShieldViewViewController.swift │ │ │ │ ├── JKScrollviewCardLayoutViewController.swift │ │ │ │ ├── JKTapActionLabelViewController.swift │ │ │ │ ├── JKTaskManagerViewController.swift │ │ │ │ ├── JKUnitConverterViewController.swift │ │ │ │ ├── JKWaterFallLayoutViewController.swift │ │ │ │ ├── JKWeakTimerViewController.swift │ │ │ │ ├── KeyboardAccessoryViewController.swift │ │ │ │ ├── QRCodeImageFactoryViewController.swift │ │ │ │ └── SmallToolsViewController.swift │ │ │ ├── Model │ │ │ │ ├── Person.swift │ │ │ │ └── SoundModel.swift │ │ │ └── View │ │ │ │ ├── DarkModeHeadView.swift │ │ │ │ ├── DarkModePickerView.swift │ │ │ │ ├── DescriptionCustomViewCell.swift │ │ │ │ ├── JKEmptyView.swift │ │ │ │ ├── JKPanViewCell.swift │ │ │ │ ├── JKPanViewChildView.swift │ │ │ │ ├── JKPanViewCustomView.swift │ │ │ │ ├── JKRollingNoticeViewCell1.swift │ │ │ │ ├── JKRollingNoticeViewCell2.swift │ │ │ │ ├── JKRollingNoticeViewCell2.xib │ │ │ │ ├── JKSoundPickView.swift │ │ │ │ ├── JKTeamRideShareLongImageCollectionViewCell.swift │ │ │ │ ├── JKTeamRideShareShortImageCollectionViewCell.swift │ │ │ │ └── SettingCustomViewCell.swift │ │ └── UIKitExtensionViewController │ │ │ ├── Controller │ │ │ ├── CAGradientLayerExtensionViewController.swift │ │ │ ├── CALayerExtensionViewController.swift │ │ │ ├── CATextLayerExtensionViewController.swift │ │ │ ├── UIAlertControllerExtensionViewController.swift │ │ │ ├── UIApplicationExtensionViewController.swift │ │ │ ├── UIBarButtonItemExtensionViewController.swift │ │ │ ├── UIBezierPathExtensionViewController.swift │ │ │ ├── UIButtonExtensionViewController.swift │ │ │ ├── UICollectionViewExtensionViewController.swift │ │ │ ├── UIColorExtensionViewController.swift │ │ │ ├── UIControlExtensionViewController.swift │ │ │ ├── UIImageExtensionViewController.swift │ │ │ ├── UIImageViewExtensionViewController.swift │ │ │ ├── UIKitExtensionViewController.swift │ │ │ ├── UILabelExtensionViewController.swift │ │ │ ├── UINavigationBarExtensionViewController.swift │ │ │ ├── UINavigationControllerExtensionViewController.swift │ │ │ ├── UIScreenExtensionViewController.swift │ │ │ ├── UIScrollViewExtensionViewController.swift │ │ │ ├── UISliderExtensionViewController.swift │ │ │ ├── UIStackViewExtensionViewController.swift │ │ │ ├── UISwitchExtensionViewController.swift │ │ │ ├── UITabBarControllerExtensionViewController.swift │ │ │ ├── UITabbarExtensionViewController.swift │ │ │ ├── UITableViewCellExtensionViewController.swift │ │ │ ├── UITableViewExtensionViewController.swift │ │ │ ├── UITextFieldExtensionViewController.swift │ │ │ ├── UITextViewExtensionViewController.swift │ │ │ ├── UIViewControllerExtensionViewController.swift │ │ │ ├── UIViewExtensionViewController.swift │ │ │ ├── UIVisualEffectViewExtensionViewController.swift │ │ │ └── WKWebViewExtensionViewController.swift │ │ │ └── View │ │ │ └── ConrnersTableViewCell.swift │ ├── English.lproj │ │ └── Localizable.strings │ ├── GuideX_2.png │ ├── Images.xcassets │ │ ├── AppIcon.appiconset │ │ │ └── Contents.json │ │ ├── Contents.json │ │ ├── Frame 676.imageset │ │ │ ├── Contents.json │ │ │ └── Frame 676@2x.png │ │ ├── Triangle.imageset │ │ │ ├── Contents.json │ │ │ ├── Triangle@2x.png │ │ │ └── Triangle@3x.png │ │ ├── bg.imageset │ │ │ ├── Contents.json │ │ │ └── bg.png │ │ ├── campass_light.imageset │ │ │ ├── Contents.json │ │ │ ├── campass_light@2x.png │ │ │ └── campass_light@3x.png │ │ ├── cell_drag.imageset │ │ │ ├── Contents.json │ │ │ ├── cell_drag@2x.png │ │ │ └── cell_drag@3x.png │ │ ├── dashline_left_dark.imageset │ │ │ ├── Contents.json │ │ │ ├── dashline_left_dark@2x.png │ │ │ └── dashline_left_dark@3x.png │ │ ├── dashline_left_light.imageset │ │ │ ├── Contents.json │ │ │ ├── dashline_left_light@2x.png │ │ │ └── dashline_left_light@3x.png │ │ ├── dashline_middle_dark.imageset │ │ │ ├── Contents.json │ │ │ ├── dashline_middle_dark@2x.png │ │ │ └── dashline_middle_dark@3x.png │ │ ├── dashline_middle_light.imageset │ │ │ ├── Contents.json │ │ │ ├── dashline_middle_light@2x.png │ │ │ └── dashline_middle_light@3x.png │ │ ├── dashline_right_dark.imageset │ │ │ ├── Contents.json │ │ │ ├── dashline_right_dark@2x.png │ │ │ └── dashline_right_dark@3x.png │ │ ├── dashline_right_light.imageset │ │ │ ├── Contents.json │ │ │ ├── dashline_right_light@2x.png │ │ │ └── dashline_right_light@3x.png │ │ ├── detect_qr.imageset │ │ │ ├── Contents.json │ │ │ └── detect_qr.png │ │ ├── drag_delete.imageset │ │ │ ├── Contents.json │ │ │ ├── drag_delete@2x.png │ │ │ └── drag_delete@3x.png │ │ ├── empty_icon.imageset │ │ │ ├── Contents.json │ │ │ ├── empty_icon@2x.png │ │ │ └── empty_icon@3x.png │ │ ├── favorite_delete.imageset │ │ │ ├── Contents.json │ │ │ ├── favorite_delete@2x.png │ │ │ └── favorite_delete@3x.png │ │ ├── flower.imageset │ │ │ ├── Contents.json │ │ │ └── flower.png │ │ ├── flower2.imageset │ │ │ ├── Contents.json │ │ │ └── flower2.png │ │ ├── go_favorite_selected.imageset │ │ │ ├── Contents.json │ │ │ ├── go_favorite_selected@2x.png │ │ │ └── go_favorite_selected@3x.png │ │ ├── good.imageset │ │ │ ├── Contents.json │ │ │ ├── good@2x.png │ │ │ └── good@3x.png │ │ ├── good1.imageset │ │ │ ├── Contents.json │ │ │ ├── good1@2x.png │ │ │ └── good1@3x.png │ │ ├── good2.imageset │ │ │ ├── Contents.json │ │ │ ├── good2@2x.png │ │ │ └── good2@3x.png │ │ ├── good3.imageset │ │ │ ├── Contents.json │ │ │ ├── good3@2x.png │ │ │ └── good3@3x.png │ │ ├── good5.imageset │ │ │ ├── Contents.json │ │ │ └── good5@2x.png │ │ ├── good6.imageset │ │ │ ├── Contents.json │ │ │ └── good6@2x.png │ │ ├── good7.imageset │ │ │ ├── Contents.json │ │ │ └── good7@2x.png │ │ ├── good8.imageset │ │ │ ├── Contents.json │ │ │ └── good8@2x.png │ │ ├── good9.imageset │ │ │ ├── Contents.json │ │ │ └── good9@2x.png │ │ ├── huaban.imageset │ │ │ ├── Contents.json │ │ │ └── huaban.png │ │ ├── ironman.imageset │ │ │ ├── Contents.json │ │ │ └── ironman.png │ │ ├── large.imageset │ │ │ ├── Contents.json │ │ │ └── large.png │ │ ├── mark.imageset │ │ │ ├── Contents.json │ │ │ ├── mark@2x.png │ │ │ └── mark@3x.png │ │ ├── mark_highlighted.imageset │ │ │ ├── Contents.json │ │ │ ├── mark_highlighted@2x.png │ │ │ └── mark_highlighted@3x.png │ │ ├── network_error.imageset │ │ │ ├── Contents.json │ │ │ ├── network_error@2x.png │ │ │ └── network_error@3x.png │ │ ├── pika3.dataset │ │ │ ├── Contents.json │ │ │ └── pika3.gif │ │ ├── qr_test.imageset │ │ │ ├── Contents.json │ │ │ └── qr_test.png │ │ ├── rank_up.imageset │ │ │ ├── Contents.json │ │ │ ├── rank_up@2x.png │ │ │ └── rank_up@3x.png │ │ ├── refresh.imageset │ │ │ ├── Contents.json │ │ │ ├── refresh@2x.png │ │ │ └── refresh@3x.png │ │ ├── screen_no_content.imageset │ │ │ ├── Contents.json │ │ │ ├── screen_no_content@2x.png │ │ │ └── screen_no_content@3x.png │ │ ├── screen_no_network.imageset │ │ │ ├── Contents.json │ │ │ ├── screen_no_network@2x.png │ │ │ └── screen_no_network@3x.png │ │ ├── selected_point_animation.imageset │ │ │ ├── Contents.json │ │ │ ├── selected_point_animation@2x.png │ │ │ └── selected_point_animation@3x.png │ │ ├── selected_point_circle.imageset │ │ │ ├── Contents.json │ │ │ ├── selected_point_circle@2x.png │ │ │ └── selected_point_circle@3x.png │ │ ├── sender.imageset │ │ │ ├── Contents.json │ │ │ ├── sender@2x.png │ │ │ └── sender@3x.png │ │ ├── tabbar_item_home.imageset │ │ │ ├── Contents.json │ │ │ ├── tabbar_item_home@2x-1.png │ │ │ ├── tabbar_item_home@2x.png │ │ │ ├── tabbar_item_home@3x-1.png │ │ │ └── tabbar_item_home@3x.png │ │ ├── tabbar_profile.imageset │ │ │ ├── Contents.json │ │ │ ├── tabbar_profile@2x.png │ │ │ └── tabbar_profile@3x.png │ │ ├── tabbar_profile_selected.imageset │ │ │ ├── Contents.json │ │ │ ├── tabbar_profile_selected@2x.png │ │ │ └── tabbar_profile_selected@3x.png │ │ ├── testicon.imageset │ │ │ ├── Contents.json │ │ │ └── testicon.png │ │ ├── tfboy.imageset │ │ │ ├── Contents.json │ │ │ └── tfboy.png │ │ ├── trade_validperiod.imageset │ │ │ ├── Contents.json │ │ │ ├── trade_validperiod@2x.png │ │ │ └── trade_validperiod@3x.png │ │ ├── trade_validperiod_selected.imageset │ │ │ ├── Contents.json │ │ │ ├── trade_validperiod_selected@2x.png │ │ │ └── trade_validperiod_selected@3x.png │ │ ├── yy.imageset │ │ │ ├── Contents.json │ │ │ └── yy.png │ │ └── 特殊配置 │ │ │ ├── Contents.json │ │ │ ├── special_configuration_off.imageset │ │ │ ├── Contents.json │ │ │ ├── special_configuration_off@2x.png │ │ │ └── special_configuration_off@3x.png │ │ │ ├── special_configuration_off_selected.imageset │ │ │ ├── Contents.json │ │ │ ├── special_configuration_off_selected@2x.png │ │ │ └── special_configuration_off_selected@3x.png │ │ │ ├── special_configuration_on.imageset │ │ │ ├── Contents.json │ │ │ ├── special_configuration_on@2x.png │ │ │ └── special_configuration_on@3x.png │ │ │ └── special_configuration_on_selected.imageset │ │ │ ├── Contents.json │ │ │ ├── special_configuration_on_selected@2x.png │ │ │ └── special_configuration_on_selected@3x.png │ ├── Info.plist │ ├── JKBaseKit.bundle │ │ ├── JKBank.plist │ │ ├── icon_scan@2x.png │ │ └── icon_scan@3x.png │ ├── JKSwiftExtension_Example-Bridging-Header.h │ ├── Persons.plist │ ├── PrefixHeader.pch │ ├── PrivacyInfo.xcprivacy │ ├── StoryboardTest │ │ ├── MyStoryboard.storyboard │ │ ├── MyStoryboard2.storyboard │ │ └── StoryboardTest1ViewController.swift │ ├── TestFile │ │ ├── Controller │ │ │ ├── BleViewController.swift │ │ │ ├── DeleteViewController.swift │ │ │ ├── EightViewController.swift │ │ │ ├── FBArrowLabel.swift │ │ │ ├── FBGuidePage.swift │ │ │ ├── FiveViewController.swift │ │ │ ├── FourViewController.swift │ │ │ ├── JKEmptyViewController.swift │ │ │ ├── JKVVViewController.swift │ │ │ ├── JKWheelPickerViewController.swift │ │ │ ├── LanePicViewController.swift │ │ │ ├── MapKitTestViewController.swift │ │ │ ├── NineViewController.swift │ │ │ ├── Notification+Extension.swift │ │ │ ├── NotificationTetstViewController.h │ │ │ ├── NotificationTetstViewController.m │ │ │ ├── OneViewController.swift │ │ │ ├── PresetntFourViewController.swift │ │ │ ├── PresetntOneViewController.swift │ │ │ ├── PresetntThreeViewController.swift │ │ │ ├── PresetntTwoViewController.swift │ │ │ ├── ProfileViewController.swift │ │ │ ├── QRTestViewController.swift │ │ │ ├── RadiusViewController.swift │ │ │ ├── RateLimitViewController.swift │ │ │ ├── SegmentViewController.swift │ │ │ ├── SixViewController.swift │ │ │ ├── SpeechViewController.swift │ │ │ ├── TenViewController.swift │ │ │ ├── TestFileViewController.swift │ │ │ ├── TestViewController.swift │ │ │ ├── ThreeViewController.swift │ │ │ ├── TouchViewController.swift │ │ │ ├── TwoViewController.swift │ │ │ └── UIBezierPathViewController.swift │ │ ├── Extension │ │ │ ├── Image+Photo.swift │ │ │ └── UIApplication+Photo.swift │ │ ├── FiveViewController.swift │ │ ├── FourViewController.swift │ │ ├── Notification+Extension.swift │ │ ├── Tools │ │ │ └── JKPhotoAlbumUtil.swift │ │ └── View │ │ │ ├── AnimationView.swift │ │ │ ├── DeleteViewCell.swift │ │ │ ├── DrivingSpecialConfigurationSegmentView.swift │ │ │ ├── FBArrowTestLabel.swift │ │ │ ├── JKTouchView.swift │ │ │ ├── JKWheelPicker │ │ │ ├── JKWheelPicker.swift │ │ │ ├── JKWheelPickerCell.swift │ │ │ └── JKWheelPickerCollectionViewLayout.swift │ │ │ ├── LaneBackInfoAndTurnIconView.swift │ │ │ ├── RadiusViewCell.swift │ │ │ ├── SliderDashLineView.swift │ │ │ ├── TGSLoginAgreeView.swift │ │ │ └── UIAlertController+Extension1.swift │ ├── ViewController.swift │ ├── baby.gif │ ├── en.lproj │ │ └── Localizable.strings │ ├── font │ │ ├── din-2014_bold-italic.ttf │ │ ├── fanghei.ttf │ │ └── niu1.ttf │ ├── girl.jpg │ ├── herf.html │ ├── huaban1.png │ ├── mebubble@2x.png │ ├── pika2.gif │ ├── testFile.text │ ├── testicon.png │ ├── yoububble@2x.png │ └── zh-Hans.lproj │ │ ├── LaunchScreen.strings │ │ ├── Localizable.strings │ │ └── Main.strings ├── Podfile ├── Podfile.lock ├── Pods │ ├── Local Podspecs │ │ └── JKSwiftExtension.podspec.json │ ├── Manifest.lock │ ├── Pods.xcodeproj │ │ └── project.pbxproj │ ├── SnapKit │ │ ├── LICENSE │ │ ├── README.md │ │ └── Sources │ │ │ ├── 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 │ │ │ ├── ConstraintMakerPrioritizable.swift │ │ │ ├── ConstraintMakerRelatable+Extensions.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 │ │ ├── JKSwiftExtension │ │ ├── JKSwiftExtension-Info.plist │ │ ├── JKSwiftExtension-dummy.m │ │ ├── JKSwiftExtension-prefix.pch │ │ ├── JKSwiftExtension-umbrella.h │ │ ├── JKSwiftExtension.debug.xcconfig │ │ ├── JKSwiftExtension.modulemap │ │ ├── JKSwiftExtension.release.xcconfig │ │ └── ResourceBundle-JKSwiftExtension-JKSwiftExtension-Info.plist │ │ ├── Pods-JKSwiftExtension_Example │ │ ├── Pods-JKSwiftExtension_Example-Info.plist │ │ ├── Pods-JKSwiftExtension_Example-acknowledgements.markdown │ │ ├── Pods-JKSwiftExtension_Example-acknowledgements.plist │ │ ├── Pods-JKSwiftExtension_Example-dummy.m │ │ ├── Pods-JKSwiftExtension_Example-frameworks-Debug-input-files.xcfilelist │ │ ├── Pods-JKSwiftExtension_Example-frameworks-Debug-output-files.xcfilelist │ │ ├── Pods-JKSwiftExtension_Example-frameworks-Release-input-files.xcfilelist │ │ ├── Pods-JKSwiftExtension_Example-frameworks-Release-output-files.xcfilelist │ │ ├── Pods-JKSwiftExtension_Example-frameworks.sh │ │ ├── Pods-JKSwiftExtension_Example-umbrella.h │ │ ├── Pods-JKSwiftExtension_Example.debug.xcconfig │ │ ├── Pods-JKSwiftExtension_Example.modulemap │ │ └── Pods-JKSwiftExtension_Example.release.xcconfig │ │ └── SnapKit │ │ ├── SnapKit-Info.plist │ │ ├── SnapKit-dummy.m │ │ ├── SnapKit-prefix.pch │ │ ├── SnapKit-umbrella.h │ │ ├── SnapKit.debug.xcconfig │ │ ├── SnapKit.modulemap │ │ └── SnapKit.release.xcconfig └── Tests │ ├── Info.plist │ ├── StringTest.swift │ └── Tests.swift ├── JKSwiftExtension.podspec ├── LICENSE ├── OtherEvent ├── JKContactsKit.swift ├── JKContactsKitViewController.swift ├── JKEKEvent.swift ├── JKEKEventViewController.swift ├── JKThirdPartyAppType.swift └── 通讯录和日历事件感兴趣的可以看看 ├── Package.swift ├── README.md ├── Sources ├── Assets │ ├── .gitkeep │ └── ironman.png └── Classes │ ├── .gitkeep │ ├── FoundationExtension │ ├── AVAssetExportSession+Extension.swift │ ├── Array+Extension.swift │ ├── Bool+Extension.swift │ ├── Bundle+Extension.swift │ ├── CGFloat+Extension.swift │ ├── CGPoint+Extension.swift │ ├── CGRect+Extension.swift │ ├── CGSize+Extension.swift │ ├── CLLocation+Extension.swift │ ├── Character+Extension.swift │ ├── Data+extension.swift │ ├── Date+Extension.swift │ ├── DateFormatter+Extension.swift │ ├── Dictionary+Extension.swift │ ├── DispatchQueue+Extension.swift │ ├── Double+Extension.swift │ ├── FileManager+Extension.swift │ ├── Float+Extension.swift │ ├── IndexPath+Extension.swift │ ├── Int+Extension.swift │ ├── Int64+Extension.swift │ ├── NSAttributedString+Extension.swift │ ├── NSDecimalNumber+Extension.swift │ ├── NSDecimalNumberHandler+Extension.swift │ ├── NSIndexPath+Extension.swift │ ├── NSMutableAttributedString+Extension.swift │ ├── NSNumber+Extension.swift │ ├── NSObject+Extension.swift │ ├── NSRange+Extension.swift │ ├── NumberFormatter+Extension.swift │ ├── Range+Extension.swift │ ├── String+Extension.swift │ ├── Timer+Extension.swift │ ├── UIDevice+Extension.swift │ ├── UIFont+Extension.swift │ ├── UInt+Extension.swift │ ├── URL+Extension.swift │ └── UserDefaults+Extesnion.swift │ ├── Protocol │ ├── JKEmitterable.swift │ ├── JKJSON.swift │ ├── JKNibLoadable.swift │ ├── JKPOP.swift │ ├── JKPOPExtension │ │ └── JKPOP+String.swift │ └── Optional+Extension.swift │ ├── SmallTools │ ├── JKAlertViewController.swift │ ├── JKAsyncs.swift │ ├── JKCircleProgressView.swift │ ├── JKClosure.swift │ ├── JKCommonTool.swift │ ├── JKContentSize.swift │ ├── JKCustomPickView.swift │ ├── JKDarkModeUtil.swift │ ├── JKDecodeString.swift │ ├── JKDrawSignatureView.swift │ ├── JKFileLog.swift │ ├── JKGlobalTools.swift │ ├── JKOperator.swift │ ├── JKPaddingLabel.swift │ ├── JKPanView.swift │ ├── JKPastedTextField.swift │ ├── JKPastedTextView.swift │ ├── JKPlaceHolderTextView.swift │ ├── JKPrint.swift │ ├── JKRegexHelper.swift │ ├── JKRollingNoticeView.swift │ ├── JKRuntime.swift │ ├── JKScreenShieldView.swift │ ├── JKScrollviewCardLayout.swift │ ├── JKTapActionLabel.swift │ ├── JKTaskManager.swift │ ├── JKThemeProvider.swift │ ├── JKUnitConverter.swift │ ├── JKWaterFallLayout.swift │ ├── JKWeakTimer.swift │ ├── KeyboardAccessory.swift │ └── QRCodeImageFactory.swift │ └── UIKitExtension │ ├── CAGradientLayer+Extension.swift │ ├── CALayer+Extension.swift │ ├── CATextLayer+Extension.swift │ ├── UIAlertController+Extension.swift │ ├── UIApplication+Extension.swift │ ├── UIBarButtonItem+Extension.swift │ ├── UIBezierPath+Extension.swift │ ├── UIButton+Extension.swift │ ├── UICollectionView+Extension.swift │ ├── UIColor+Extension.swift │ ├── UIControl+Extension.swift │ ├── UIGestureRecognizer+Extension.swift │ ├── UIImage+Extension.swift │ ├── UIImageView+Extension.swift │ ├── UILabel+Extension.swift │ ├── UINavigationBar+Extension.swift │ ├── UINavigationController+Extension.swift │ ├── UIPageControl+Extension.swift │ ├── UIScreen+Extension.swift │ ├── UIScrollView+Extension.swift │ ├── UISlider+Extension.swift │ ├── UIStackView+Extension.swift │ ├── UISwitch+Extension.swift │ ├── UITabBar+Extension.swift │ ├── UITabBarController+Extension.swift │ ├── UITableView+Extension.swift │ ├── UITableViewCell+Extension.swift │ ├── UITapGestureRecognizer+Extension.swift │ ├── UITextField+Extension.swift │ ├── UITextView+Extension.swift │ ├── UIView+Extension.swift │ ├── UIViewController+Extension.swift │ ├── UIVisualEffectView+Extension.swift │ └── WKWebView+Extension.swift ├── Tests └── JKSwiftExtensionTests │ └── JKSwiftExtensionTests.swift └── _Pods.xcodeproj /.swiftpm/xcode/package.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Example/JKSwiftExtension.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Example/JKSwiftExtension.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /Example/JKSwiftExtension.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /Example/JKSwiftExtension.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /Example/JKSwiftExtension/CashCow.bundle/GuideX_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JoanKing/JKSwiftExtension/60ed6ddc03b541fe251cb0bbc0cca1fea389a4ac/Example/JKSwiftExtension/CashCow.bundle/GuideX_1.png -------------------------------------------------------------------------------- /Example/JKSwiftExtension/CashCow.bundle/GuideX_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JoanKing/JKSwiftExtension/60ed6ddc03b541fe251cb0bbc0cca1fea389a4ac/Example/JKSwiftExtension/CashCow.bundle/GuideX_2.png -------------------------------------------------------------------------------- /Example/JKSwiftExtension/CashCow.bundle/GuideX_3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JoanKing/JKSwiftExtension/60ed6ddc03b541fe251cb0bbc0cca1fea389a4ac/Example/JKSwiftExtension/CashCow.bundle/GuideX_3.png -------------------------------------------------------------------------------- /Example/JKSwiftExtension/Class/FoundationExtensionViewController/Controller/BoolExtensionViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // BoolExtensionViewController.swift 3 | // JKSwiftExtension_Example 4 | // 5 | // Created by IronMan on 2020/11/3. 6 | // Copyright © 2020 CocoaPods. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | class BoolExtensionViewController: BaseViewController { 12 | 13 | override func viewDidLoad() { 14 | super.viewDidLoad() 15 | 16 | headDataArray = ["一、基本的扩展"] 17 | dataArray = [["Bool 值转 Int"]] 18 | } 19 | } 20 | 21 | // MARK: - 一、基本的扩展 22 | extension BoolExtensionViewController { 23 | 24 | // MARK: 1.01、Bool 值转 Int 25 | @objc func test101() { 26 | let value: Bool = true 27 | JKPrint("Bool 值转 Int", "\(value) 转 Int 后为 \(value.jk.boolToInt)") 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /Example/JKSwiftExtension/Class/FoundationExtensionViewController/Controller/CGPointExtensionViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // CGPointExtensionViewController.swift 3 | // JKSwiftExtension_Example 4 | // 5 | // Created by 小冲冲 on 2024/1/22. 6 | // Copyright © 2024 CocoaPods. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | class CGPointExtensionViewController: BaseViewController { 12 | override func viewDidLoad() { 13 | super.viewDidLoad() 14 | 15 | headDataArray = ["一、CGPoint的基本扩展"] 16 | dataArray = [["两个CGPoint进行 - 运算", "计算两个 CGPoint 的中点"]] 17 | } 18 | } 19 | 20 | // MARK: - 一、CGPoint的基本扩展 21 | extension CGPointExtensionViewController { 22 | 23 | // MARK: 1.02、计算两个 CGPoint 的中点 24 | @objc func test102() { 25 | let point1 = CGPoint(x: 20, y: 40) 26 | let point2 = CGPoint(x: 10, y: 90) 27 | JKPrint("点1:\(point1) 点2:\(point2) 之间的中间点是:\(point1.midPoint(by: point2))") 28 | } 29 | 30 | // MARK: 1.01、两个CGPoint进行 - 运算 31 | @objc func test101() { 32 | let point1 = CGPoint(x: 20, y: 40) 33 | let point2 = CGPoint(x: 10, y: 90) 34 | JKPrint("两个CGPoint进行 - 运算:点1:\(point1) 点2:\(point2) 进行 - 运算的结果是:\(point1 - point2)") 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /Example/JKSwiftExtension/Class/FoundationExtensionViewController/Controller/CharacterExtensionViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // CharacterExtensionViewController.swift 3 | // JKSwiftExtension_Example 4 | // 5 | // Created by IronMan on 2020/11/3. 6 | // Copyright © 2020 CocoaPods. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | class CharacterExtensionViewController: BaseViewController { 12 | 13 | override func viewDidLoad() { 14 | super.viewDidLoad() 15 | 16 | headDataArray = ["一、Character 与其他类型的转换", "二、常用的属性和方法"] 17 | dataArray = [["Character 转 String", "Character 转 Int"], ["判断是不是 Emoji 表情"]] 18 | } 19 | } 20 | 21 | // MARK: - 二、常用的属性和方法 22 | extension CharacterExtensionViewController { 23 | 24 | // MARK: 2.01、判断是不是 Emoji 表情 25 | @objc func test201() { 26 | let emoji: Character = "🙃" 27 | JKPrint("判断是不是 Emoji 表情", "\(emoji) 是不是emoji表情:\(emoji.jk.isEmoji)") 28 | } 29 | } 30 | 31 | // MARK: - 一、Character 与其他类型的转换 32 | extension CharacterExtensionViewController { 33 | 34 | // MARK: 1.02、Character 转 Int 35 | @objc func test102() { 36 | let charater: Character = "f" 37 | JKPrint("Character 转 Int", "\(charater) 转 Int 后为 \(charater.jk.charToInt ?? 0)") 38 | } 39 | 40 | // MARK: 1.01、Character 转 String 41 | @objc func test101() { 42 | let charater: Character = "a" 43 | JKPrint("Character 转 String", "\(charater) 转 String 后为 \(charater.jk.charToString)") 44 | } 45 | } 46 | 47 | -------------------------------------------------------------------------------- /Example/JKSwiftExtension/Class/FoundationExtensionViewController/Controller/DateFormatterExtensionViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // DateFormatterExtensionViewController.swift 3 | // JKSwiftExtension_Example 4 | // 5 | // Created by IronMan on 2020/11/4. 6 | // Copyright © 2020 CocoaPods. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | class DateFormatterExtensionViewController: BaseViewController { 12 | 13 | override func viewDidLoad() { 14 | super.viewDidLoad() 15 | 16 | headDataArray = ["一、基本的扩展"] 17 | dataArray = [["格式化快捷方式"]] 18 | } 19 | 20 | } 21 | 22 | // MARK: - 一、基本的扩展 23 | extension DateFormatterExtensionViewController { 24 | 25 | // MARK: 1.01、格式化快捷方式 26 | @objc func test101() { 27 | let dateFormatter = DateFormatter(format: "EEEE") 28 | JKPrint("格式化快捷方式", "\(dateFormatter)") 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /Example/JKSwiftExtension/Class/FoundationExtensionViewController/Controller/IndexPathExtensionViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // IndexPathExtensionViewController.swift 3 | // JKSwiftExtension_Example 4 | // 5 | // Created by IronMan on 2020/12/31. 6 | // Copyright © 2020 CocoaPods. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | class IndexPathExtensionViewController: BaseViewController { 12 | 13 | override func viewDidLoad() { 14 | super.viewDidLoad() 15 | 16 | headDataArray = ["一、基本扩展"] 17 | dataArray = [["{section, row}", "当前 NSIndexPath 的前一个 NSIndexPath", "当前 NSIndexPath 的后一个 NSIndexPath"]] 18 | } 19 | } 20 | 21 | // MARK: - 一、基本扩展 22 | extension IndexPathExtensionViewController { 23 | 24 | // MARK: 1.03、当前 NSIndexPath 的后一个 NSIndexPath 25 | @objc func test103() { 26 | 27 | } 28 | 29 | // MARK: 1.02、当前 NSIndexPath 的前一个 NSIndexPath 30 | @objc func test102() { 31 | 32 | } 33 | 34 | // MARK: 1.01、{section, row} 35 | @objc func test101() { 36 | 37 | } 38 | } 39 | 40 | -------------------------------------------------------------------------------- /Example/JKSwiftExtension/Class/FoundationExtensionViewController/Controller/NSIndexPathExtensionViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // NSIndexPathExtensionViewController.swift 3 | // JKSwiftExtension_Example 4 | // 5 | // Created by IronMan on 2020/12/31. 6 | // Copyright © 2020 CocoaPods. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | class NSIndexPathExtensionViewController: BaseViewController { 12 | 13 | override func viewDidLoad() { 14 | super.viewDidLoad() 15 | 16 | headDataArray = ["一、基本扩展"] 17 | dataArray = [["{section, row}", "当前 NSIndexPath 的前一个 NSIndexPath", "当前 NSIndexPath 的后一个 NSIndexPath"]] 18 | } 19 | } 20 | 21 | // MARK: - 一、基本扩展 22 | extension NSIndexPathExtensionViewController { 23 | 24 | // MARK: 1.03、当前 NSIndexPath 的后一个 NSIndexPath 25 | @objc func test103() { 26 | 27 | } 28 | 29 | // MARK: 1.02、当前 NSIndexPath 的前一个 NSIndexPath 30 | @objc func test102() { 31 | 32 | } 33 | 34 | // MARK: 1.01、{section, row} 35 | @objc func test101() { 36 | 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /Example/JKSwiftExtension/Class/FoundationExtensionViewController/Controller/NSObjectExtensionViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // NSObjectExtensionViewController.swift 3 | // JKSwiftExtension_Example 4 | // 5 | // Created by IronMan on 2020/11/1. 6 | // Copyright © 2020 CocoaPods. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | class NSObjectExtensionViewController: BaseViewController { 12 | 13 | override func viewDidLoad() { 14 | super.viewDidLoad() 15 | headDataArray = ["一、 NSObject 属性的扩展", "二、一些常用的方法"] 16 | dataArray = [["类名(对象方法)", "类名(类方法)"], ["利用运行时获取类里面的成员变量"]] 17 | } 18 | } 19 | 20 | // MARK: - 二、一些常用的方法 21 | extension NSObjectExtensionViewController { 22 | 23 | // MARK: 2.01、利用运行时获取类里面的成员变量 24 | @objc func test201() { 25 | JKPrint("利用运行时获取类里面的成员变量", "\(UIView.printIvars())") 26 | } 27 | } 28 | 29 | // MARK: - 一、 NSObject 属性的扩展 30 | extension NSObjectExtensionViewController { 31 | 32 | // MARK: 1.02、类名(类方法) 33 | @objc func test102() { 34 | JKPrint("类名(类方法)", "\(Self.className)") 35 | } 36 | 37 | // MARK: 1.01、类名(对象方法) 38 | @objc func test101() { 39 | JKPrint("类名(对象方法)", "\(self.className)") 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /Example/JKSwiftExtension/Class/FoundationExtensionViewController/Controller/NSRangeExtensionViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // NSRangeExtensionViewController.swift 3 | // JKSwiftExtension_Example 4 | // 5 | // Created by IronMan on 2021/2/18. 6 | // Copyright © 2021 CocoaPods. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | class NSRangeExtensionViewController: BaseViewController { 12 | 13 | override func viewDidLoad() { 14 | super.viewDidLoad() 15 | 16 | headDataArray = ["一、基本的扩展"] 17 | dataArray = [["NSRange转换成Range的方法"]] 18 | } 19 | } 20 | 21 | // MARK: - 一、基本的扩展 22 | extension NSRangeExtensionViewController { 23 | 24 | // MARK: 1.01、NSRange转换成Range的方法 25 | @objc func test101() { 26 | let string = "123456Hello World !!!" 27 | let nsRange = NSRange(location: 2, length: 2) 28 | 29 | if let range = nsRange.jk.toRange(string: string) { 30 | JKPrint("NSRange转换成Range的方法", "父字符串:\(string)", "\(nsRange) 转Range后为:\(range)") 31 | } else { 32 | debugPrint("没有拿到了range") 33 | } 34 | } 35 | } 36 | 37 | -------------------------------------------------------------------------------- /Example/JKSwiftExtension/Class/FoundationExtensionViewController/Controller/RangeExtensionViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // RangeExtensionViewController.swift 3 | // JKSwiftExtension_Example 4 | // 5 | // Created by IronMan on 2021/3/25. 6 | // Copyright © 2021 CocoaPods. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | class RangeExtensionViewController: BaseViewController { 12 | 13 | override func viewDidLoad() { 14 | super.viewDidLoad() 15 | 16 | headDataArray = ["一、基本的扩展"] 17 | dataArray = [["Range转换成NSRange的方法"]] 18 | } 19 | } 20 | 21 | // MARK: - 一、基本的扩展 22 | extension RangeExtensionViewController { 23 | 24 | // MARK: 1.01、Range转换成NSRange的方法 25 | @objc func test101() { 26 | let string = "123456Hello World !!!" 27 | let subString = "Hello World" 28 | 29 | if let range = string.range(of: subString) { 30 | let nsRange = range.jk.toNSRange(in: string) 31 | JKPrint("Range转换成NSRange的方法", "父字符串为:\(string) 子字符串为:\(subString)", "子字符串在父字符串里面的range为 \(range) 转NSRange后为:\(nsRange)") 32 | } 33 | } 34 | } 35 | 36 | -------------------------------------------------------------------------------- /Example/JKSwiftExtension/Class/FoundationExtensionViewController/Controller/UIntExtensionViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // UIntExtensionViewController.swift 3 | // JKSwiftExtension_Example 4 | // 5 | // Created by IronMan on 2020/11/3. 6 | // Copyright © 2020 CocoaPods. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | class UIntExtensionViewController: BaseViewController { 12 | 13 | override func viewDidLoad() { 14 | super.viewDidLoad() 15 | 16 | headDataArray = ["一、UInt 的基本转换"] 17 | dataArray = [["转 Int"]] 18 | } 19 | } 20 | 21 | // MARK: - 一、基本的扩展 22 | extension UIntExtensionViewController { 23 | 24 | // MARK: 1.01、转 Int 25 | @objc func test101() { 26 | let value: UInt = 2345 27 | JKPrint("转 Int", "\(value) 转 Int 后为 \(value.jk.uintToInt)") 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /Example/JKSwiftExtension/Class/FoundationExtensionViewController/Model/UserDefaultsModel.swift: -------------------------------------------------------------------------------- 1 | // 2 | // UserDefaultsModel.swift 3 | // JKSwiftExtension_Example 4 | // 5 | // Created by 王冲 on 2022/6/12. 6 | // Copyright © 2022 CocoaPods. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | struct UserDefaultsModel: Codable { 12 | /// 用户的 13 | var uid: Int = 0 14 | /// 用户的名字 15 | var name: String = "" 16 | } 17 | -------------------------------------------------------------------------------- /Example/JKSwiftExtension/Class/ProtocolViewController/Controller/JKJSONViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // JKJSONViewController.swift 3 | // JKSwiftExtension_Example 4 | // 5 | // Created by IronMan on 2021/2/22. 6 | // Copyright © 2021 CocoaPods. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | //用户类 12 | class User: JKJSON { 13 | /// 姓名 14 | var name: String = "" 15 | /// 昵称 16 | var nickname: String? 17 | /// 年龄 18 | var age: Int? 19 | /// 邮件地址 20 | var emails: [String]? 21 | /// 电话 22 | var tels: [Telephone]? 23 | /// 创建时间 24 | var createTime: Date = Date() 25 | } 26 | 27 | //电话结构体 28 | struct Telephone: JKJSON { 29 | /// 电话标题 30 | var title: String 31 | /// 电话号码 32 | var number: String 33 | } 34 | class JKJSONViewController: UIViewController { 35 | 36 | override func viewDidLoad() { 37 | super.viewDidLoad() 38 | self.title = "签名" 39 | self.view.backgroundColor = .white 40 | 41 | // 创建一个User实例对象 42 | let user1 = User() 43 | user1.name = "hangge" 44 | user1.age = 100 45 | user1.emails = ["hangge@hangge.com","system@hangge.com"] 46 | // 添加动画 47 | let tel1 = Telephone(title: "手机", number: "123456") 48 | let tel2 = Telephone(title: "公司座机", number: "001-0358") 49 | user1.tels = [tel1, tel2] 50 | 51 | // 输出json字符串 52 | debugPrint(user1.toJSONString()!) 53 | } 54 | } 55 | -------------------------------------------------------------------------------- /Example/JKSwiftExtension/Class/ProtocolViewController/Controller/NibLoadableViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // NibLoadableViewController.swift 3 | // JKSwiftExtension_Example 4 | // 5 | // Created by IronMan on 2020/11/18. 6 | // Copyright © 2020 CocoaPods. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | class NibLoadableViewController: BaseViewController { 12 | 13 | override func viewDidLoad() { 14 | super.viewDidLoad() 15 | headDataArray = ["一、继承于UIView的才可以使用该协议的扩展"] 16 | dataArray = [["加载xib视图"]] 17 | } 18 | 19 | override func didReceiveMemoryWarning() { 20 | super.didReceiveMemoryWarning() 21 | } 22 | } 23 | 24 | // MARK: - 一、继承于UIView的才可以使用该协议的扩展 25 | extension NibLoadableViewController { 26 | 27 | // MARK: 1.01、加载xib视图 28 | @objc func test101() { 29 | var testView = TestView.loadFromNib().frame(CGRect(x: 0, y: 100, width: 100, height: 100)) 30 | testView.jk.centerX = self.view.jk.centerX 31 | self.view.addSubview(testView) 32 | 33 | JKAsyncs.asyncDelay(3) { 34 | } _: { 35 | testView.removeFromSuperview() 36 | } 37 | } 38 | 39 | } 40 | 41 | -------------------------------------------------------------------------------- /Example/JKSwiftExtension/Class/ProtocolViewController/View/TestView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // TestView.swift 3 | // JKSwiftExtension_Example 4 | // 5 | // Created by IronMan on 2020/11/18. 6 | // Copyright © 2020 CocoaPods. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | class TestView: UIView, JKNibLoadable { 12 | 13 | } 14 | -------------------------------------------------------------------------------- /Example/JKSwiftExtension/Class/SmallToolsViewController/Controller/JKCommonToolViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // JKCommonToolViewController.swift 3 | // JKSwiftExtension_Example 4 | // 5 | // Created by IronMan on 2020/11/18. 6 | // Copyright © 2020 CocoaPods. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | class JKCommonToolViewController: BaseViewController { 12 | 13 | override func viewDidLoad() { 14 | super.viewDidLoad() 15 | 16 | headDataArray = ["一、基本的方法"] 17 | dataArray = [["交换两个值", "模型对比返回差异"]] 18 | } 19 | 20 | override func didReceiveMemoryWarning() { 21 | super.didReceiveMemoryWarning() 22 | } 23 | } 24 | 25 | // MARK: - 一、基本的方法 26 | extension JKCommonToolViewController { 27 | 28 | // MARK: 1.02、模型对比返回差异 29 | @objc func test102() { 30 | let person1 = Person() 31 | person1.name = "A" 32 | person1.age = 20 33 | 34 | let person2 = Person() 35 | person2.name = "B" 36 | person2.age = 1 37 | let params = JKCommonTool.diffBetween(firstModel: person1, secondModel: person2, ignores: ["name"]) 38 | debugPrint("param:\(params)") 39 | // self.navigationController?.pushViewController(NotificationTetstViewController(), animated: true) 40 | } 41 | 42 | // MARK: 1.01、交换两个值 43 | @objc func test101() { 44 | var a = 1 45 | var b = 2 46 | JKCommonTool.swapMe(value1: &a, value2: &b) 47 | JKPrint("交换两个值", "a = \(a) b = \(b)") 48 | } 49 | } 50 | -------------------------------------------------------------------------------- /Example/JKSwiftExtension/Class/SmallToolsViewController/Controller/JKCustomPickViewViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // JKCustomPickViewViewController.swift 3 | // JKSwiftExtension_Example 4 | // 5 | // Created by 王冲 on 2023/2/14. 6 | // Copyright © 2023 CocoaPods. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | class JKCustomPickViewViewController: UIViewController { 12 | 13 | override func viewDidLoad() { 14 | super.viewDidLoad() 15 | 16 | self.view.backgroundColor = .white 17 | } 18 | 19 | override func touchesBegan(_ touches: Set, with event: UIEvent?) { 20 | let pickerView = JKSoundPickView(frame: CGRect(x: 0, y: 0, width: UIScreen.main.bounds.size.width, height: UIScreen.main.bounds.size.height), dataSource: ["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", "27", "28", "29"], inComponent: 2) 21 | // pickerView.rowAndComponentCallBack = {(resultStr) in 22 | // debugPrint(resultStr as Any) 23 | // } 24 | pickerView.show() 25 | } 26 | 27 | /* 28 | // MARK: - Navigation 29 | 30 | // In a storyboard-based application, you will often want to do a little preparation before navigation 31 | override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 32 | // Get the new view controller using segue.destination. 33 | // Pass the selected object to the new view controller. 34 | } 35 | */ 36 | 37 | } 38 | -------------------------------------------------------------------------------- /Example/JKSwiftExtension/Class/SmallToolsViewController/Controller/JKOperatorViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // JKOperatorViewController.swift 3 | // JKSwiftExtension_Example 4 | // 5 | // Created by 小冲冲 on 2023/12/8. 6 | // Copyright © 2023 CocoaPods. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | import JKSwiftExtension 11 | 12 | class JKOperatorViewController: BaseViewController { 13 | 14 | override func viewDidLoad() { 15 | super.viewDidLoad() 16 | headDataArray = ["一、位移运算符"] 17 | dataArray = [["右移算符"]] 18 | } 19 | } 20 | 21 | //MARK: - 一、位移运算符 22 | extension JKOperatorViewController { 23 | 24 | //MARK: 1.01、无符号右移运算符 25 | @objc func test101() { 26 | debugPrint("\(-8192)右移1位后结果为:\(-8192 |>>>| 1)") 27 | debugPrint("\(2147483642)右移1位后结果为:\(2147483642 |>>>| 1)") 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /Example/JKSwiftExtension/Class/SmallToolsViewController/Controller/JKPaddingLabelViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // JKPaddingLabelViewController.swift 3 | // JKSwiftExtension_Example 4 | // 5 | // Created by IronMan on 2021/2/26. 6 | // Copyright © 2021 CocoaPods. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | class JKPaddingLabelViewController: BaseViewController { 12 | 13 | override func viewDidLoad() { 14 | super.viewDidLoad() 15 | 16 | headDataArray = ["一、基本的使用"] 17 | dataArray = [["设置有内边距的label"]] 18 | } 19 | } 20 | 21 | // MARK: - 一、基本的工具 22 | extension JKPaddingLabelViewController { 23 | 24 | // MARK: 1.01、设置可点击的label 25 | @objc func test101() { 26 | 27 | let label = JKPaddingLabel() 28 | label.backgroundColor = UIColor.randomColor 29 | label.text = "我是有内边距的" 30 | label.paddingTop = 5 31 | label.paddingLeft = 5 32 | label.paddingBottom = 5 33 | label.paddingRight = 5 34 | self.view.addSubview(label) 35 | 36 | label.snp.makeConstraints { (make) in 37 | make.center.equalToSuperview() 38 | make.height.width.lessThanOrEqualTo(100) 39 | } 40 | 41 | JKAsyncs.asyncDelay(3) { 42 | } _: { 43 | label.removeFromSuperview() 44 | } 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /Example/JKSwiftExtension/Class/SmallToolsViewController/Controller/JKScreenShieldViewViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // JKScreenShieldViewViewController.swift 3 | // JKSwiftExtension_Example 4 | // 5 | // Created by chongwang on 2024/3/19. 6 | // Copyright © 2024 CocoaPods. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | class JKScreenShieldViewViewController: UIViewController { 12 | 13 | override func viewDidLoad() { 14 | super.viewDidLoad() 15 | self.view.backgroundColor = .white 16 | self.view.addSubview(screenShieldView) 17 | screenShieldView.snp.makeConstraints { make in 18 | make.center.equalToSuperview() 19 | make.size.equalTo(CGSize(width: 200, height: 200)) 20 | } 21 | 22 | screenShieldView.addSubview(testView1) 23 | testView1.snp.makeConstraints { make in 24 | make.center.equalToSuperview() 25 | make.size.equalTo(CGSize(width: 100, height: 100)) 26 | } 27 | } 28 | 29 | /// 防截屏录屏子视图 30 | lazy var testView1: UIView = { 31 | let testView = UIView() 32 | testView.backgroundColor = .yellow 33 | return testView 34 | }() 35 | 36 | /// 防止截屏,放在其上子视图都会被屏蔽截图 37 | lazy var screenShieldView: JKScreenShieldView = { 38 | let shieldView = JKScreenShieldView() 39 | shieldView.backgroundColor = .brown 40 | return shieldView 41 | }() 42 | } 43 | -------------------------------------------------------------------------------- /Example/JKSwiftExtension/Class/SmallToolsViewController/Controller/JKTaskManagerViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // JKTaskManagerViewController.swift 3 | // JKSwiftExtension_Example 4 | // 5 | // Created by chongwang on 2025/2/5. 6 | // Copyright © 2025 CocoaPods. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | class JKTaskManagerViewController: BaseViewController { 12 | 13 | override func viewDidLoad() { 14 | super.viewDidLoad() 15 | 16 | headDataArray = ["一、基本使用"] 17 | dataArray = [["延迟任务"]] 18 | 19 | } 20 | 21 | override func didReceiveMemoryWarning() { 22 | super.didReceiveMemoryWarning() 23 | } 24 | } 25 | 26 | // MARK: - 一、基本使用 27 | extension JKTaskManagerViewController { 28 | 29 | // MARK: 1.01、延迟任务 30 | @objc func test101() { 31 | let taskManager = JKTaskManager() 32 | 33 | // 调度一个延迟任务 34 | taskManager.scheduleTask(identifier: "task1", delay: 5) { 35 | debugPrint("任务 1 执行") 36 | } 37 | 38 | // 取消任务 39 | // taskManager.cancelTask(identifier: "task1") 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /Example/JKSwiftExtension/Class/SmallToolsViewController/Controller/KeyboardAccessoryViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // KeyboardAccessoryViewController.swift 3 | // JKSwiftExtension_Example 4 | // 5 | // Created by IronMan on 2020/11/18. 6 | // Copyright © 2020 CocoaPods. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | class KeyboardAccessoryViewController: BaseViewController { 12 | var textView: UITextView = { 13 | let view = UITextView(frame: CGRect(x: 20, y: 100, width: jk_kScreenW - 40, height: 200)) 14 | view.backgroundColor = .randomColor 15 | return view 16 | }() 17 | 18 | override func viewDidLoad() { 19 | super.viewDidLoad() 20 | 21 | headDataArray = ["一、键盘的 inputAccessoryView"] 22 | dataArray = [["done"]] 23 | 24 | let keyboardAccessory = KeyboardAccessory() 25 | keyboardAccessory.delegate = self 26 | textView.inputAccessoryView = keyboardAccessory 27 | self.view.addSubview(textView) 28 | } 29 | 30 | override func didReceiveMemoryWarning() { 31 | super.didReceiveMemoryWarning() 32 | } 33 | } 34 | 35 | // MARK: - 一、基本的方法 36 | extension KeyboardAccessoryViewController: KeyboardAccessoryDelegate { 37 | 38 | func keyboardAccessoryDone() { 39 | debugPrint("点击了 done") 40 | UIApplication.jk.keyWindow?.endEditing(true) 41 | } 42 | } 43 | 44 | -------------------------------------------------------------------------------- /Example/JKSwiftExtension/Class/SmallToolsViewController/Model/Person.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Person.swift 3 | // JKSwiftExtension_Example 4 | // 5 | // Created by IronMan on 2022/2/15. 6 | // Copyright © 2022 CocoaPods. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | @objcMembers class Person: NSObject { 12 | /// 年龄 13 | @objc dynamic var age: Int = 0 14 | 15 | var name: String = "" 16 | 17 | var number: Int = 20 { 18 | willSet { 19 | self.number = 999 20 | } 21 | didSet { 22 | debugPrint("旧值:\(oldValue) 新值:\(self.number)") 23 | } 24 | } 25 | 26 | var height: Int { 27 | if age > 10 { 28 | return 100 29 | } 30 | return 0 31 | } 32 | 33 | /// 修改成员变量的值 34 | func addValue() { 35 | age += 1 36 | } 37 | 38 | deinit { 39 | debugPrint("----销毁-----") 40 | } 41 | } 42 | 43 | 44 | @objcMembers class SonSon: NSObject { 45 | var age = 10 46 | } 47 | 48 | protocol DDD { 49 | func test() 50 | } 51 | -------------------------------------------------------------------------------- /Example/JKSwiftExtension/Class/SmallToolsViewController/Model/SoundModel.swift: -------------------------------------------------------------------------------- 1 | // 2 | // SoundModel.swift 3 | // JKSwiftExtension_Example 4 | // 5 | // Created by 王冲 on 2023/3/14. 6 | // Copyright © 2023 CocoaPods. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | class SoundModel: NSObject { 12 | /// 名字 13 | var name: String = "" 14 | /// 1-63的需要,达到63后从1开始,指令全部(有值的音效槽)发送 15 | var sound_weight: Int = 1 16 | } 17 | -------------------------------------------------------------------------------- /Example/JKSwiftExtension/Class/SmallToolsViewController/View/DescriptionCustomViewCell.swift: -------------------------------------------------------------------------------- 1 | // 2 | // DescriptionCustomViewCell.swift 3 | // FutureBull 4 | // 5 | // Created by IronMan on 2021/7/27. 6 | // Copyright © 2021 wuyanwei. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | class DescriptionCustomViewCell: UITableViewCell { 12 | 13 | /// 文本的展示 14 | var contentLabel: UILabel = { 15 | let label = UILabel() 16 | label.font = UIFont.jk.textR(14) 17 | label.textColor = UIColor.cN3 18 | label.numberOfLines = 0 19 | label.textAlignment = .left 20 | return label 21 | }() 22 | 23 | override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) { 24 | super.init(style: style, reuseIdentifier: reuseIdentifier) 25 | // self.selectionStyle = .none 26 | self.contentView.backgroundColor = .cBackViewColor 27 | self.contentView.addSubview(contentLabel) 28 | contentLabel.snp.makeConstraints { (make) in 29 | make.edges.equalToSuperview().inset(UIEdgeInsets(top: 6, left: 15, bottom: 12, right: 15)) 30 | } 31 | } 32 | 33 | required init?(coder: NSCoder) { 34 | fatalError("init(coder:) has not been implemented") 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /Example/JKSwiftExtension/Class/SmallToolsViewController/View/JKPanViewCustomView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // JKPanViewCustomView.swift 3 | // JKSwiftExtension_Example 4 | // 5 | // Created by 王冲 on 2022/12/6. 6 | // Copyright © 2022 CocoaPods. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | class JKPanViewCustomView: JKPanView { 12 | 13 | override init(frame: CGRect) { 14 | super.init(frame: frame) 15 | self.backgroundColor = .white 16 | self.addSubview(testView1) 17 | self.addSubview(testView2) 18 | 19 | testView1.snp.makeConstraints { make in 20 | make.top.left.equalTo(20) 21 | make.right.equalTo(-20) 22 | make.height.equalTo(30) 23 | } 24 | 25 | testView2.snp.makeConstraints { make in 26 | make.bottom.left.equalTo(20) 27 | make.right.equalTo(-20) 28 | make.height.equalTo(30) 29 | } 30 | } 31 | 32 | required init?(coder: NSCoder) { 33 | fatalError("init(coder:) has not been implemented") 34 | } 35 | 36 | lazy var testView1 = { 37 | let view = UIView() 38 | view.backgroundColor = .brown 39 | return view 40 | }() 41 | 42 | lazy var testView2 = { 43 | let view = UIView() 44 | view.backgroundColor = .green 45 | return view 46 | }() 47 | 48 | } 49 | -------------------------------------------------------------------------------- /Example/JKSwiftExtension/Class/SmallToolsViewController/View/JKRollingNoticeViewCell2.swift: -------------------------------------------------------------------------------- 1 | // 2 | // JKRollingNoticeViewCell2.swift 3 | // JKSwiftExtension_Example 4 | // 5 | // Created by 王冲 on 2022/5/16. 6 | // Copyright © 2022 CocoaPods. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | class JKRollingNoticeViewCell2: JKNoticeViewCell { 12 | 13 | @IBOutlet weak var contentLabel: UILabel! 14 | 15 | override func awakeFromNib() { 16 | super.awakeFromNib() 17 | } 18 | 19 | func noticeCellData(name: String) { 20 | contentLabel.text = name 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /Example/JKSwiftExtension/Class/SmallToolsViewController/View/JKTeamRideShareLongImageCollectionViewCell.swift: -------------------------------------------------------------------------------- 1 | // 2 | // JKTeamRideShareLongImageCollectionViewCell.swift 3 | // JKScrollViewCard 4 | // 5 | // Created by chongwang on 2025/1/6. 6 | // 7 | 8 | import UIKit 9 | import SnapKit 10 | 11 | class JKTeamRideShareLongImageCollectionViewCell: UICollectionViewCell { 12 | 13 | override init(frame: CGRect) { 14 | super.init(frame: frame) 15 | initUI() 16 | commonInit() 17 | changeTheme() 18 | loadData() 19 | } 20 | 21 | required init?(coder: NSCoder) { 22 | fatalError("init(coder:) has not been implemented") 23 | } 24 | 25 | lazy var testView: UIView = { 26 | let view = UIView() 27 | view.backgroundColor = .white 28 | return view 29 | }() 30 | } 31 | 32 | // MARK: - 基本设置 33 | extension JKTeamRideShareLongImageCollectionViewCell { 34 | 35 | private func initUI() { 36 | contentView.addSubview(testView) 37 | } 38 | 39 | private func commonInit() { 40 | testView.snp.makeConstraints { make in 41 | make.center.equalToSuperview() 42 | make.size.equalTo(CGSize(width: 100, height: 100)) 43 | } 44 | } 45 | 46 | private func changeTheme() { 47 | contentView.backgroundColor = .green 48 | 49 | layoutIfNeeded() 50 | 51 | testView.jk.addCorner(conrners: .allCorners, radius: 50) 52 | } 53 | 54 | /// 加载数据 55 | private func loadData() { 56 | 57 | } 58 | } 59 | 60 | -------------------------------------------------------------------------------- /Example/JKSwiftExtension/Class/SmallToolsViewController/View/JKTeamRideShareShortImageCollectionViewCell.swift: -------------------------------------------------------------------------------- 1 | // 2 | // JKTeamRideShareShortImageCollectionViewCell.swift 3 | // JKScrollViewCard 4 | // 5 | // Created by chongwang on 2025/1/6. 6 | // 7 | import UIKit 8 | import SnapKit 9 | 10 | class JKTeamRideShareShortImageCollectionViewCell: UICollectionViewCell { 11 | 12 | override init(frame: CGRect) { 13 | super.init(frame: frame) 14 | initUI() 15 | commonInit() 16 | changeTheme() 17 | loadData() 18 | } 19 | 20 | required init?(coder: NSCoder) { 21 | fatalError("init(coder:) has not been implemented") 22 | } 23 | 24 | lazy var testView: UIView = { 25 | let view = UIView() 26 | view.backgroundColor = .white 27 | return view 28 | }() 29 | } 30 | 31 | // MARK: - 基本设置 32 | extension JKTeamRideShareShortImageCollectionViewCell { 33 | 34 | private func initUI() { 35 | contentView.addSubview(testView) 36 | } 37 | 38 | private func commonInit() { 39 | testView.snp.makeConstraints { make in 40 | make.center.equalToSuperview() 41 | make.size.equalTo(CGSize(width: 100, height: 100)) 42 | } 43 | } 44 | 45 | private func changeTheme() { 46 | contentView.backgroundColor = .yellow 47 | } 48 | 49 | /// 加载数据 50 | private func loadData() { 51 | 52 | } 53 | } 54 | -------------------------------------------------------------------------------- /Example/JKSwiftExtension/Class/UIKitExtensionViewController/Controller/CAGradientLayerExtensionViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // CAGradientLayerExtensionViewController.swift 3 | // JKSwiftExtension_Example 4 | // 5 | // Created by IronMan on 2021/2/1. 6 | // Copyright © 2021 CocoaPods. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | class CAGradientLayerExtensionViewController: BaseViewController { 12 | 13 | override func viewDidLoad() { 14 | super.viewDidLoad() 15 | 16 | headDataArray = ["一、基本的颜色扩展"] 17 | dataArray = [["背景的渐变设置"]] 18 | } 19 | } 20 | 21 | // MARK: - 一、基本的颜色扩展 22 | extension CAGradientLayerExtensionViewController { 23 | 24 | // MARK: 1.01、背景的渐变设置 25 | @objc func test101() { 26 | // 获取彩虹渐变层 27 | let gradientLayer = CAGradientLayer().jk.gradientLayer(.horizontal, [UIColor.red.cgColor, UIColor.green.cgColor], nil) 28 | 29 | let button = UIButton(frame: CGRect(x: 30, y: 150, width: jk_kScreenW - 60, height: 50)) 30 | self.view.addSubview(button) 31 | 32 | // 设置其CAGradientLayer对象的frame,并插入button的layer 33 | gradientLayer.frame = CGRect(x: 0, y: 0, width: button.jk.width, height: button.jk.height) 34 | button.layer.insertSublayer(gradientLayer, at: 0) 35 | 36 | JKAsyncs.asyncDelay(2) { 37 | } _: { 38 | button.removeFromSuperview() 39 | } 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /Example/JKSwiftExtension/Class/UIKitExtensionViewController/Controller/UIBarButtonItemExtensionViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // UIBarButtonItemExtensionViewController.swift 3 | // JKSwiftExtension_Example 4 | // 5 | // Created by IronMan on 2020/11/10. 6 | // Copyright © 2020 CocoaPods. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | class UIBarButtonItemExtensionViewController: BaseViewController { 12 | 13 | override func viewDidLoad() { 14 | super.viewDidLoad() 15 | 16 | headDataArray = ["一、基本的扩展"] 17 | dataArray = [["快捷创建 UIBarButtonItem"]] 18 | } 19 | 20 | @objc func click(sender: UIButton) { 21 | JKPrint("点击事件") 22 | } 23 | } 24 | 25 | // MARK: - 一、基本的扩展 26 | extension UIBarButtonItemExtensionViewController { 27 | 28 | // MARK: 1.01、快捷创建 UIBarButtonItem 29 | @objc func test101() { 30 | let barButtonItem = UIBarButtonItem.jk.createBarbuttonItem(name: "mark", target: self, action: #selector(click)) 31 | self.navigationItem.rightBarButtonItem = barButtonItem 32 | } 33 | } 34 | 35 | -------------------------------------------------------------------------------- /Example/JKSwiftExtension/Class/UIKitExtensionViewController/Controller/UINavigationBarExtensionViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // UINavigationBarExtensionViewController.swift 3 | // JKSwiftExtension_Example 4 | // 5 | // Created by IronMan on 2020/12/2. 6 | // Copyright © 2020 CocoaPods. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | class UINavigationBarExtensionViewController: BaseViewController { 12 | 13 | override func viewDidLoad() { 14 | super.viewDidLoad() 15 | 16 | headDataArray = ["一、基本的扩展"] 17 | dataArray = [["改变StateBar的颜色", "去掉 StateBar 的颜色"]] 18 | } 19 | } 20 | 21 | // MARK: - 一、基本的扩展 22 | extension UINavigationBarExtensionViewController { 23 | 24 | // MARK: 1.02、去掉 StateBar 的颜色 25 | @objc func test102() { 26 | self.navigationController?.navigationBar.resetBackgroundColor() 27 | } 28 | 29 | // MARK: 1.01、改变StateBar的颜色 30 | @objc func test101() { 31 | self.navigationController?.navigationBar.changeStateBarBackgroundColor(.green) 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /Example/JKSwiftExtension/Class/UIKitExtensionViewController/Controller/UINavigationControllerExtensionViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // UINavigationControllerExtensionViewController.swift 3 | // JKSwiftExtension_Example 4 | // 5 | // Created by IronMan on 2020/11/11. 6 | // Copyright © 2020 CocoaPods. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | class UINavigationControllerExtensionViewController: BaseViewController { 12 | 13 | override func viewDidLoad() { 14 | super.viewDidLoad() 15 | 16 | headDataArray = ["一、基本的扩展"] 17 | dataArray = [["pop返回后再push进某个控制器", "往前返回(Pop)几个控制器", "往前返回(Pop)几个控制器 后 push进某个控制器", "pop 到某个vc,以传入的vc类型为准,从栈顶逐个便利,直到找到这个vc,如果遍历完成后没找到,则返回false"]] 18 | } 19 | } 20 | 21 | // MARK: - 一、基本的扩展 22 | extension UINavigationControllerExtensionViewController { 23 | 24 | // MARK: 1.04、pop 到某个vc,以传入的vc类型为准,从栈顶逐个便利,直到找到这个vc,如果遍历完成后没找到,则返回false 25 | @objc func test104() { 26 | self.navigationController?.jk.popToViewController(as: ViewController.self, animated: true) 27 | } 28 | 29 | // MARK: 1.03、往前返回(Pop)几个控制器 后 push进某个控制器 30 | @objc func test103() { 31 | self.navigationController?.jk.pop(count: 2, andPush: UITableViewExtensionViewController(), animated: true) 32 | } 33 | 34 | // MARK: 1.02、往前返回(Pop)几个控制器 35 | @objc func test102() { 36 | self.navigationController?.jk.pop(count: 2, animated: true) 37 | } 38 | 39 | // MARK: 1.01、pop返回后再push进某个控制器 40 | @objc func test101() { 41 | self.navigationController?.jk.popCurrentAndPush(vc: OneViewController(), animated: true) 42 | } 43 | } 44 | 45 | -------------------------------------------------------------------------------- /Example/JKSwiftExtension/Class/UIKitExtensionViewController/Controller/UIScreenExtensionViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // UIScreenExtensionViewController.swift 3 | // JKSwiftExtension_Example 4 | // 5 | // Created by IronMan on 2020/11/9. 6 | // Copyright © 2020 CocoaPods. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | class UIScreenExtensionViewController: BaseViewController { 11 | 12 | override func viewDidLoad() { 13 | super.viewDidLoad() 14 | 15 | headDataArray = ["一、基本的扩展"] 16 | dataArray = [["获取宽度", "获取高度", "截屏和录屏通知", "获取屏幕对角线长度"]] 17 | } 18 | } 19 | 20 | // MARK: - 一、基本的扩展 21 | extension UIScreenExtensionViewController { 22 | // MARK: 1.4、获取屏幕对角线长度 23 | @objc func test104() { 24 | debugPrint("获取屏幕对角线长度:\(UIScreen.jk.diagonalLength)") 25 | 26 | } 27 | 28 | // MARK: 1.03、截屏通知 29 | @objc func test103() { 30 | UIScreen.jk.detectScreenShot { (result) in 31 | JKPrint("\(result)") 32 | } 33 | } 34 | 35 | // MARK: 1.02、获取高度 36 | @objc func test102() { 37 | JKPrint("获取高度:\(UIScreen.jk.height)") 38 | } 39 | 40 | // MARK: 1.01、获取宽度 41 | @objc func test101() { 42 | JKPrint("获取宽度:\(UIScreen.jk.width)") 43 | } 44 | } 45 | 46 | -------------------------------------------------------------------------------- /Example/JKSwiftExtension/Class/UIKitExtensionViewController/Controller/UISliderExtensionViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // UISliderExtensionViewController.swift 3 | // JKSwiftExtension_Example 4 | // 5 | // Created by IronMan on 2021/1/5. 6 | // Copyright © 2021 CocoaPods. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | class UISliderExtensionViewController: BaseViewController { 12 | 13 | override func viewDidLoad() { 14 | super.viewDidLoad() 15 | 16 | headDataArray = ["一、基本的扩展"] 17 | dataArray = [["UISlider的 闭包事件"]] 18 | } 19 | } 20 | 21 | // MARK: - 一、基本的扩展 22 | extension UISliderExtensionViewController { 23 | 24 | // MARK: 1.01、UISlider的 闭包事件 25 | @objc func test101() { 26 | let slider = UISlider(frame: CGRect(x: 50, y: 100, width: 150, height: 50)) 27 | slider.backgroundColor = .randomColor 28 | slider.maximumValue = 10 29 | slider.minimumValue = 0 30 | slider.value = 0.2 31 | slider.jk.setHandle { (value) in 32 | guard let weakvalue = value else { 33 | return 34 | } 35 | debugPrint("\(weakvalue)") 36 | } 37 | self.view.addSubview(slider) 38 | 39 | JKAsyncs.asyncDelay(20) { 40 | } _: { 41 | slider.removeFromSuperview() 42 | } 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /Example/JKSwiftExtension/Class/UIKitExtensionViewController/Controller/UITabBarControllerExtensionViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // UITabBarControllerExtensionViewController.swift 3 | // JKSwiftExtension_Example 4 | // 5 | // Created by IronMan on 2020/12/31. 6 | // Copyright © 2020 CocoaPods. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | class UITabBarControllerExtensionViewController: BaseViewController { 12 | 13 | override func viewDidLoad() { 14 | super.viewDidLoad() 15 | 16 | headDataArray = ["一、基本扩展"] 17 | dataArray = [["当前选择索引"]] 18 | } 19 | } 20 | 21 | // MARK: - 一、基本扩展 22 | extension UITabBarControllerExtensionViewController { 23 | 24 | // MARK: 1.01、当前选择索引 25 | @objc func test101() { 26 | JKPrint("当前选择索引:\(UITabBarController.jk.selectedIdx)") 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /Example/JKSwiftExtension/Class/UIKitExtensionViewController/Controller/UITabbarExtensionViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // UITabbarExtensionViewController.swift 3 | // JKSwiftExtension_Example 4 | // 5 | // Created by 小冲冲 on 2023/10/17. 6 | // Copyright © 2023 CocoaPods. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | class UITabbarExtensionViewController: BaseViewController { 12 | 13 | override func viewDidLoad() { 14 | super.viewDidLoad() 15 | 16 | headDataArray = ["一、基本扩展"] 17 | dataArray = [["设置透明背景"]] 18 | } 19 | 20 | } 21 | 22 | // MARK: - 一、基本扩展 23 | extension UITabbarExtensionViewController { 24 | 25 | // MARK: 1.01、设置透明背景 26 | @objc func test101() { 27 | JKPrint("设置透明背景") 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /Example/JKSwiftExtension/Class/UIKitExtensionViewController/Controller/UITableViewCellExtensionViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // UITableViewCellExtensionViewController.swift 3 | // JKSwiftExtension_Example 4 | // 5 | // Created by IronMan on 2020/12/17. 6 | // Copyright © 2020 CocoaPods. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | class UITableViewCellExtensionViewController: BaseViewController { 12 | 13 | override func viewDidLoad() { 14 | super.viewDidLoad() 15 | 16 | headDataArray = ["一、基本的扩展"] 17 | dataArray = [["返回cell所在的UITableView"]] 18 | } 19 | } 20 | 21 | // MARK: - 一、基本的扩展 22 | extension UITableViewCellExtensionViewController { 23 | 24 | // MARK: 1.01、返回cell所在的UITableView 25 | @objc func test101() { 26 | 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /Example/JKSwiftExtension/Class/UIKitExtensionViewController/Controller/UIVisualEffectViewExtensionViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // UIVisualEffectViewExtensionViewController.swift 3 | // JKSwiftExtension_Example 4 | // 5 | // Created by 王冲 on 2022/3/26. 6 | // Copyright © 2022 CocoaPods. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | class UIVisualEffectViewExtensionViewController: BaseViewController { 12 | 13 | override func viewDidLoad() { 14 | super.viewDidLoad() 15 | 16 | headDataArray = ["一、基本的扩展"] 17 | dataArray = [["创建一个UIVisualEffectView对象"]] 18 | } 19 | } 20 | 21 | // MARK: - 一、基本的扩展 22 | extension UIVisualEffectViewExtensionViewController { 23 | 24 | // MARK: 1.01、创建一个UIVisualEffectView对象 25 | @objc func test101() { 26 | let visualEffectView = UIVisualEffectView.jk.visualEffectView(size: CGSize(width: 100, height: 100)) 27 | let image = UIImage(named: "testicon") 28 | var imageView = UIImageView(frame: CGRect(x: 0, y: 150, width: 200, height: 200)) 29 | imageView.image = image 30 | imageView.contentMode = .scaleAspectFit 31 | imageView.jk.centerX = self.view.jk.centerX 32 | imageView.addSubview(visualEffectView) 33 | self.view.addSubview(imageView) 34 | JKAsyncs.asyncDelay(3, { 35 | }) { 36 | imageView.removeFromSuperview() 37 | } 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /Example/JKSwiftExtension/English.lproj/Localizable.strings: -------------------------------------------------------------------------------- 1 | /* 2 | Localizable.strings 3 | JKSwiftExtension 4 | 5 | Created by chongwang on 2024/4/26. 6 | Copyright © 2024 CocoaPods. All rights reserved. 7 | */ 8 | 9 | "Text_01" = "banana"; 10 | -------------------------------------------------------------------------------- /Example/JKSwiftExtension/GuideX_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JoanKing/JKSwiftExtension/60ed6ddc03b541fe251cb0bbc0cca1fea389a4ac/Example/JKSwiftExtension/GuideX_2.png -------------------------------------------------------------------------------- /Example/JKSwiftExtension/Images.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "iphone", 5 | "size" : "20x20", 6 | "scale" : "2x" 7 | }, 8 | { 9 | "idiom" : "iphone", 10 | "size" : "20x20", 11 | "scale" : "3x" 12 | }, 13 | { 14 | "idiom" : "iphone", 15 | "size" : "29x29", 16 | "scale" : "2x" 17 | }, 18 | { 19 | "idiom" : "iphone", 20 | "size" : "29x29", 21 | "scale" : "3x" 22 | }, 23 | { 24 | "idiom" : "iphone", 25 | "size" : "40x40", 26 | "scale" : "2x" 27 | }, 28 | { 29 | "idiom" : "iphone", 30 | "size" : "40x40", 31 | "scale" : "3x" 32 | }, 33 | { 34 | "idiom" : "iphone", 35 | "size" : "60x60", 36 | "scale" : "2x" 37 | }, 38 | { 39 | "idiom" : "iphone", 40 | "size" : "60x60", 41 | "scale" : "3x" 42 | }, 43 | { 44 | "idiom" : "ios-marketing", 45 | "size" : "1024x1024", 46 | "scale" : "1x" 47 | } 48 | ], 49 | "info" : { 50 | "version" : 1, 51 | "author" : "xcode" 52 | } 53 | } 54 | -------------------------------------------------------------------------------- /Example/JKSwiftExtension/Images.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /Example/JKSwiftExtension/Images.xcassets/Frame 676.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "Frame 676@2x.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 | -------------------------------------------------------------------------------- /Example/JKSwiftExtension/Images.xcassets/Frame 676.imageset/Frame 676@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JoanKing/JKSwiftExtension/60ed6ddc03b541fe251cb0bbc0cca1fea389a4ac/Example/JKSwiftExtension/Images.xcassets/Frame 676.imageset/Frame 676@2x.png -------------------------------------------------------------------------------- /Example/JKSwiftExtension/Images.xcassets/Triangle.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "Triangle@2x.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "filename" : "Triangle@3x.png", 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "author" : "xcode", 20 | "version" : 1 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /Example/JKSwiftExtension/Images.xcassets/Triangle.imageset/Triangle@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JoanKing/JKSwiftExtension/60ed6ddc03b541fe251cb0bbc0cca1fea389a4ac/Example/JKSwiftExtension/Images.xcassets/Triangle.imageset/Triangle@2x.png -------------------------------------------------------------------------------- /Example/JKSwiftExtension/Images.xcassets/Triangle.imageset/Triangle@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JoanKing/JKSwiftExtension/60ed6ddc03b541fe251cb0bbc0cca1fea389a4ac/Example/JKSwiftExtension/Images.xcassets/Triangle.imageset/Triangle@3x.png -------------------------------------------------------------------------------- /Example/JKSwiftExtension/Images.xcassets/bg.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "bg.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 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 | -------------------------------------------------------------------------------- /Example/JKSwiftExtension/Images.xcassets/bg.imageset/bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JoanKing/JKSwiftExtension/60ed6ddc03b541fe251cb0bbc0cca1fea389a4ac/Example/JKSwiftExtension/Images.xcassets/bg.imageset/bg.png -------------------------------------------------------------------------------- /Example/JKSwiftExtension/Images.xcassets/campass_light.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "campass_light@2x.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "filename" : "campass_light@3x.png", 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "author" : "xcode", 20 | "version" : 1 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /Example/JKSwiftExtension/Images.xcassets/campass_light.imageset/campass_light@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JoanKing/JKSwiftExtension/60ed6ddc03b541fe251cb0bbc0cca1fea389a4ac/Example/JKSwiftExtension/Images.xcassets/campass_light.imageset/campass_light@2x.png -------------------------------------------------------------------------------- /Example/JKSwiftExtension/Images.xcassets/campass_light.imageset/campass_light@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JoanKing/JKSwiftExtension/60ed6ddc03b541fe251cb0bbc0cca1fea389a4ac/Example/JKSwiftExtension/Images.xcassets/campass_light.imageset/campass_light@3x.png -------------------------------------------------------------------------------- /Example/JKSwiftExtension/Images.xcassets/cell_drag.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "cell_drag@2x.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "filename" : "cell_drag@3x.png", 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "author" : "xcode", 20 | "version" : 1 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /Example/JKSwiftExtension/Images.xcassets/cell_drag.imageset/cell_drag@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JoanKing/JKSwiftExtension/60ed6ddc03b541fe251cb0bbc0cca1fea389a4ac/Example/JKSwiftExtension/Images.xcassets/cell_drag.imageset/cell_drag@2x.png -------------------------------------------------------------------------------- /Example/JKSwiftExtension/Images.xcassets/cell_drag.imageset/cell_drag@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JoanKing/JKSwiftExtension/60ed6ddc03b541fe251cb0bbc0cca1fea389a4ac/Example/JKSwiftExtension/Images.xcassets/cell_drag.imageset/cell_drag@3x.png -------------------------------------------------------------------------------- /Example/JKSwiftExtension/Images.xcassets/dashline_left_dark.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "dashline_left_dark@2x.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "filename" : "dashline_left_dark@3x.png", 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "author" : "xcode", 20 | "version" : 1 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /Example/JKSwiftExtension/Images.xcassets/dashline_left_dark.imageset/dashline_left_dark@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JoanKing/JKSwiftExtension/60ed6ddc03b541fe251cb0bbc0cca1fea389a4ac/Example/JKSwiftExtension/Images.xcassets/dashline_left_dark.imageset/dashline_left_dark@2x.png -------------------------------------------------------------------------------- /Example/JKSwiftExtension/Images.xcassets/dashline_left_dark.imageset/dashline_left_dark@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JoanKing/JKSwiftExtension/60ed6ddc03b541fe251cb0bbc0cca1fea389a4ac/Example/JKSwiftExtension/Images.xcassets/dashline_left_dark.imageset/dashline_left_dark@3x.png -------------------------------------------------------------------------------- /Example/JKSwiftExtension/Images.xcassets/dashline_left_light.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "dashline_left_light@2x.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "filename" : "dashline_left_light@3x.png", 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "author" : "xcode", 20 | "version" : 1 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /Example/JKSwiftExtension/Images.xcassets/dashline_left_light.imageset/dashline_left_light@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JoanKing/JKSwiftExtension/60ed6ddc03b541fe251cb0bbc0cca1fea389a4ac/Example/JKSwiftExtension/Images.xcassets/dashline_left_light.imageset/dashline_left_light@2x.png -------------------------------------------------------------------------------- /Example/JKSwiftExtension/Images.xcassets/dashline_left_light.imageset/dashline_left_light@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JoanKing/JKSwiftExtension/60ed6ddc03b541fe251cb0bbc0cca1fea389a4ac/Example/JKSwiftExtension/Images.xcassets/dashline_left_light.imageset/dashline_left_light@3x.png -------------------------------------------------------------------------------- /Example/JKSwiftExtension/Images.xcassets/dashline_middle_dark.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "dashline_middle_dark@2x.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "filename" : "dashline_middle_dark@3x.png", 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "author" : "xcode", 20 | "version" : 1 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /Example/JKSwiftExtension/Images.xcassets/dashline_middle_dark.imageset/dashline_middle_dark@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JoanKing/JKSwiftExtension/60ed6ddc03b541fe251cb0bbc0cca1fea389a4ac/Example/JKSwiftExtension/Images.xcassets/dashline_middle_dark.imageset/dashline_middle_dark@2x.png -------------------------------------------------------------------------------- /Example/JKSwiftExtension/Images.xcassets/dashline_middle_dark.imageset/dashline_middle_dark@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JoanKing/JKSwiftExtension/60ed6ddc03b541fe251cb0bbc0cca1fea389a4ac/Example/JKSwiftExtension/Images.xcassets/dashline_middle_dark.imageset/dashline_middle_dark@3x.png -------------------------------------------------------------------------------- /Example/JKSwiftExtension/Images.xcassets/dashline_middle_light.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "dashline_middle_light@2x.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "filename" : "dashline_middle_light@3x.png", 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "author" : "xcode", 20 | "version" : 1 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /Example/JKSwiftExtension/Images.xcassets/dashline_middle_light.imageset/dashline_middle_light@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JoanKing/JKSwiftExtension/60ed6ddc03b541fe251cb0bbc0cca1fea389a4ac/Example/JKSwiftExtension/Images.xcassets/dashline_middle_light.imageset/dashline_middle_light@2x.png -------------------------------------------------------------------------------- /Example/JKSwiftExtension/Images.xcassets/dashline_middle_light.imageset/dashline_middle_light@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JoanKing/JKSwiftExtension/60ed6ddc03b541fe251cb0bbc0cca1fea389a4ac/Example/JKSwiftExtension/Images.xcassets/dashline_middle_light.imageset/dashline_middle_light@3x.png -------------------------------------------------------------------------------- /Example/JKSwiftExtension/Images.xcassets/dashline_right_dark.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "dashline_right_dark@2x.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "filename" : "dashline_right_dark@3x.png", 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "author" : "xcode", 20 | "version" : 1 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /Example/JKSwiftExtension/Images.xcassets/dashline_right_dark.imageset/dashline_right_dark@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JoanKing/JKSwiftExtension/60ed6ddc03b541fe251cb0bbc0cca1fea389a4ac/Example/JKSwiftExtension/Images.xcassets/dashline_right_dark.imageset/dashline_right_dark@2x.png -------------------------------------------------------------------------------- /Example/JKSwiftExtension/Images.xcassets/dashline_right_dark.imageset/dashline_right_dark@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JoanKing/JKSwiftExtension/60ed6ddc03b541fe251cb0bbc0cca1fea389a4ac/Example/JKSwiftExtension/Images.xcassets/dashline_right_dark.imageset/dashline_right_dark@3x.png -------------------------------------------------------------------------------- /Example/JKSwiftExtension/Images.xcassets/dashline_right_light.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "dashline_right_light@2x.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "filename" : "dashline_right_light@3x.png", 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "author" : "xcode", 20 | "version" : 1 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /Example/JKSwiftExtension/Images.xcassets/dashline_right_light.imageset/dashline_right_light@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JoanKing/JKSwiftExtension/60ed6ddc03b541fe251cb0bbc0cca1fea389a4ac/Example/JKSwiftExtension/Images.xcassets/dashline_right_light.imageset/dashline_right_light@2x.png -------------------------------------------------------------------------------- /Example/JKSwiftExtension/Images.xcassets/dashline_right_light.imageset/dashline_right_light@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JoanKing/JKSwiftExtension/60ed6ddc03b541fe251cb0bbc0cca1fea389a4ac/Example/JKSwiftExtension/Images.xcassets/dashline_right_light.imageset/dashline_right_light@3x.png -------------------------------------------------------------------------------- /Example/JKSwiftExtension/Images.xcassets/detect_qr.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "detect_qr.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 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 | -------------------------------------------------------------------------------- /Example/JKSwiftExtension/Images.xcassets/detect_qr.imageset/detect_qr.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JoanKing/JKSwiftExtension/60ed6ddc03b541fe251cb0bbc0cca1fea389a4ac/Example/JKSwiftExtension/Images.xcassets/detect_qr.imageset/detect_qr.png -------------------------------------------------------------------------------- /Example/JKSwiftExtension/Images.xcassets/drag_delete.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "drag_delete@2x.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "filename" : "drag_delete@3x.png", 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "author" : "xcode", 20 | "version" : 1 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /Example/JKSwiftExtension/Images.xcassets/drag_delete.imageset/drag_delete@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JoanKing/JKSwiftExtension/60ed6ddc03b541fe251cb0bbc0cca1fea389a4ac/Example/JKSwiftExtension/Images.xcassets/drag_delete.imageset/drag_delete@2x.png -------------------------------------------------------------------------------- /Example/JKSwiftExtension/Images.xcassets/drag_delete.imageset/drag_delete@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JoanKing/JKSwiftExtension/60ed6ddc03b541fe251cb0bbc0cca1fea389a4ac/Example/JKSwiftExtension/Images.xcassets/drag_delete.imageset/drag_delete@3x.png -------------------------------------------------------------------------------- /Example/JKSwiftExtension/Images.xcassets/empty_icon.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "empty_icon@2x.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "filename" : "empty_icon@3x.png", 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "author" : "xcode", 20 | "version" : 1 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /Example/JKSwiftExtension/Images.xcassets/empty_icon.imageset/empty_icon@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JoanKing/JKSwiftExtension/60ed6ddc03b541fe251cb0bbc0cca1fea389a4ac/Example/JKSwiftExtension/Images.xcassets/empty_icon.imageset/empty_icon@2x.png -------------------------------------------------------------------------------- /Example/JKSwiftExtension/Images.xcassets/empty_icon.imageset/empty_icon@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JoanKing/JKSwiftExtension/60ed6ddc03b541fe251cb0bbc0cca1fea389a4ac/Example/JKSwiftExtension/Images.xcassets/empty_icon.imageset/empty_icon@3x.png -------------------------------------------------------------------------------- /Example/JKSwiftExtension/Images.xcassets/favorite_delete.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "favorite_delete@2x.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "filename" : "favorite_delete@3x.png", 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "author" : "xcode", 20 | "version" : 1 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /Example/JKSwiftExtension/Images.xcassets/favorite_delete.imageset/favorite_delete@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JoanKing/JKSwiftExtension/60ed6ddc03b541fe251cb0bbc0cca1fea389a4ac/Example/JKSwiftExtension/Images.xcassets/favorite_delete.imageset/favorite_delete@2x.png -------------------------------------------------------------------------------- /Example/JKSwiftExtension/Images.xcassets/favorite_delete.imageset/favorite_delete@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JoanKing/JKSwiftExtension/60ed6ddc03b541fe251cb0bbc0cca1fea389a4ac/Example/JKSwiftExtension/Images.xcassets/favorite_delete.imageset/favorite_delete@3x.png -------------------------------------------------------------------------------- /Example/JKSwiftExtension/Images.xcassets/flower.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "flower.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 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 | -------------------------------------------------------------------------------- /Example/JKSwiftExtension/Images.xcassets/flower.imageset/flower.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JoanKing/JKSwiftExtension/60ed6ddc03b541fe251cb0bbc0cca1fea389a4ac/Example/JKSwiftExtension/Images.xcassets/flower.imageset/flower.png -------------------------------------------------------------------------------- /Example/JKSwiftExtension/Images.xcassets/flower2.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "flower2.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 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 | -------------------------------------------------------------------------------- /Example/JKSwiftExtension/Images.xcassets/flower2.imageset/flower2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JoanKing/JKSwiftExtension/60ed6ddc03b541fe251cb0bbc0cca1fea389a4ac/Example/JKSwiftExtension/Images.xcassets/flower2.imageset/flower2.png -------------------------------------------------------------------------------- /Example/JKSwiftExtension/Images.xcassets/go_favorite_selected.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "go_favorite_selected@2x.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "filename" : "go_favorite_selected@3x.png", 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "author" : "xcode", 20 | "version" : 1 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /Example/JKSwiftExtension/Images.xcassets/go_favorite_selected.imageset/go_favorite_selected@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JoanKing/JKSwiftExtension/60ed6ddc03b541fe251cb0bbc0cca1fea389a4ac/Example/JKSwiftExtension/Images.xcassets/go_favorite_selected.imageset/go_favorite_selected@2x.png -------------------------------------------------------------------------------- /Example/JKSwiftExtension/Images.xcassets/go_favorite_selected.imageset/go_favorite_selected@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JoanKing/JKSwiftExtension/60ed6ddc03b541fe251cb0bbc0cca1fea389a4ac/Example/JKSwiftExtension/Images.xcassets/go_favorite_selected.imageset/go_favorite_selected@3x.png -------------------------------------------------------------------------------- /Example/JKSwiftExtension/Images.xcassets/good.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "good@2x.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "filename" : "good@3x.png", 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "author" : "xcode", 20 | "version" : 1 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /Example/JKSwiftExtension/Images.xcassets/good.imageset/good@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JoanKing/JKSwiftExtension/60ed6ddc03b541fe251cb0bbc0cca1fea389a4ac/Example/JKSwiftExtension/Images.xcassets/good.imageset/good@2x.png -------------------------------------------------------------------------------- /Example/JKSwiftExtension/Images.xcassets/good.imageset/good@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JoanKing/JKSwiftExtension/60ed6ddc03b541fe251cb0bbc0cca1fea389a4ac/Example/JKSwiftExtension/Images.xcassets/good.imageset/good@3x.png -------------------------------------------------------------------------------- /Example/JKSwiftExtension/Images.xcassets/good1.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "good1@2x.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "filename" : "good1@3x.png", 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "author" : "xcode", 20 | "version" : 1 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /Example/JKSwiftExtension/Images.xcassets/good1.imageset/good1@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JoanKing/JKSwiftExtension/60ed6ddc03b541fe251cb0bbc0cca1fea389a4ac/Example/JKSwiftExtension/Images.xcassets/good1.imageset/good1@2x.png -------------------------------------------------------------------------------- /Example/JKSwiftExtension/Images.xcassets/good1.imageset/good1@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JoanKing/JKSwiftExtension/60ed6ddc03b541fe251cb0bbc0cca1fea389a4ac/Example/JKSwiftExtension/Images.xcassets/good1.imageset/good1@3x.png -------------------------------------------------------------------------------- /Example/JKSwiftExtension/Images.xcassets/good2.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "good2@2x.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "filename" : "good2@3x.png", 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "author" : "xcode", 20 | "version" : 1 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /Example/JKSwiftExtension/Images.xcassets/good2.imageset/good2@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JoanKing/JKSwiftExtension/60ed6ddc03b541fe251cb0bbc0cca1fea389a4ac/Example/JKSwiftExtension/Images.xcassets/good2.imageset/good2@2x.png -------------------------------------------------------------------------------- /Example/JKSwiftExtension/Images.xcassets/good2.imageset/good2@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JoanKing/JKSwiftExtension/60ed6ddc03b541fe251cb0bbc0cca1fea389a4ac/Example/JKSwiftExtension/Images.xcassets/good2.imageset/good2@3x.png -------------------------------------------------------------------------------- /Example/JKSwiftExtension/Images.xcassets/good3.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "good3@2x.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "filename" : "good3@3x.png", 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "author" : "xcode", 20 | "version" : 1 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /Example/JKSwiftExtension/Images.xcassets/good3.imageset/good3@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JoanKing/JKSwiftExtension/60ed6ddc03b541fe251cb0bbc0cca1fea389a4ac/Example/JKSwiftExtension/Images.xcassets/good3.imageset/good3@2x.png -------------------------------------------------------------------------------- /Example/JKSwiftExtension/Images.xcassets/good3.imageset/good3@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JoanKing/JKSwiftExtension/60ed6ddc03b541fe251cb0bbc0cca1fea389a4ac/Example/JKSwiftExtension/Images.xcassets/good3.imageset/good3@3x.png -------------------------------------------------------------------------------- /Example/JKSwiftExtension/Images.xcassets/good5.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "good5@2x.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 | -------------------------------------------------------------------------------- /Example/JKSwiftExtension/Images.xcassets/good5.imageset/good5@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JoanKing/JKSwiftExtension/60ed6ddc03b541fe251cb0bbc0cca1fea389a4ac/Example/JKSwiftExtension/Images.xcassets/good5.imageset/good5@2x.png -------------------------------------------------------------------------------- /Example/JKSwiftExtension/Images.xcassets/good6.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "good6@2x.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 | -------------------------------------------------------------------------------- /Example/JKSwiftExtension/Images.xcassets/good6.imageset/good6@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JoanKing/JKSwiftExtension/60ed6ddc03b541fe251cb0bbc0cca1fea389a4ac/Example/JKSwiftExtension/Images.xcassets/good6.imageset/good6@2x.png -------------------------------------------------------------------------------- /Example/JKSwiftExtension/Images.xcassets/good7.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "good7@2x.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 | -------------------------------------------------------------------------------- /Example/JKSwiftExtension/Images.xcassets/good7.imageset/good7@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JoanKing/JKSwiftExtension/60ed6ddc03b541fe251cb0bbc0cca1fea389a4ac/Example/JKSwiftExtension/Images.xcassets/good7.imageset/good7@2x.png -------------------------------------------------------------------------------- /Example/JKSwiftExtension/Images.xcassets/good8.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "good8@2x.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 | -------------------------------------------------------------------------------- /Example/JKSwiftExtension/Images.xcassets/good8.imageset/good8@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JoanKing/JKSwiftExtension/60ed6ddc03b541fe251cb0bbc0cca1fea389a4ac/Example/JKSwiftExtension/Images.xcassets/good8.imageset/good8@2x.png -------------------------------------------------------------------------------- /Example/JKSwiftExtension/Images.xcassets/good9.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "good9@2x.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 | -------------------------------------------------------------------------------- /Example/JKSwiftExtension/Images.xcassets/good9.imageset/good9@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JoanKing/JKSwiftExtension/60ed6ddc03b541fe251cb0bbc0cca1fea389a4ac/Example/JKSwiftExtension/Images.xcassets/good9.imageset/good9@2x.png -------------------------------------------------------------------------------- /Example/JKSwiftExtension/Images.xcassets/huaban.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "huaban.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 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 | -------------------------------------------------------------------------------- /Example/JKSwiftExtension/Images.xcassets/huaban.imageset/huaban.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JoanKing/JKSwiftExtension/60ed6ddc03b541fe251cb0bbc0cca1fea389a4ac/Example/JKSwiftExtension/Images.xcassets/huaban.imageset/huaban.png -------------------------------------------------------------------------------- /Example/JKSwiftExtension/Images.xcassets/ironman.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "ironman.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 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 | -------------------------------------------------------------------------------- /Example/JKSwiftExtension/Images.xcassets/ironman.imageset/ironman.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JoanKing/JKSwiftExtension/60ed6ddc03b541fe251cb0bbc0cca1fea389a4ac/Example/JKSwiftExtension/Images.xcassets/ironman.imageset/ironman.png -------------------------------------------------------------------------------- /Example/JKSwiftExtension/Images.xcassets/large.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "large.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 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 | -------------------------------------------------------------------------------- /Example/JKSwiftExtension/Images.xcassets/large.imageset/large.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JoanKing/JKSwiftExtension/60ed6ddc03b541fe251cb0bbc0cca1fea389a4ac/Example/JKSwiftExtension/Images.xcassets/large.imageset/large.png -------------------------------------------------------------------------------- /Example/JKSwiftExtension/Images.xcassets/mark.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "mark@2x.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "filename" : "mark@3x.png", 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "author" : "xcode", 20 | "version" : 1 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /Example/JKSwiftExtension/Images.xcassets/mark.imageset/mark@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JoanKing/JKSwiftExtension/60ed6ddc03b541fe251cb0bbc0cca1fea389a4ac/Example/JKSwiftExtension/Images.xcassets/mark.imageset/mark@2x.png -------------------------------------------------------------------------------- /Example/JKSwiftExtension/Images.xcassets/mark.imageset/mark@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JoanKing/JKSwiftExtension/60ed6ddc03b541fe251cb0bbc0cca1fea389a4ac/Example/JKSwiftExtension/Images.xcassets/mark.imageset/mark@3x.png -------------------------------------------------------------------------------- /Example/JKSwiftExtension/Images.xcassets/mark_highlighted.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "mark_highlighted@2x.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "filename" : "mark_highlighted@3x.png", 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "author" : "xcode", 20 | "version" : 1 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /Example/JKSwiftExtension/Images.xcassets/mark_highlighted.imageset/mark_highlighted@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JoanKing/JKSwiftExtension/60ed6ddc03b541fe251cb0bbc0cca1fea389a4ac/Example/JKSwiftExtension/Images.xcassets/mark_highlighted.imageset/mark_highlighted@2x.png -------------------------------------------------------------------------------- /Example/JKSwiftExtension/Images.xcassets/mark_highlighted.imageset/mark_highlighted@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JoanKing/JKSwiftExtension/60ed6ddc03b541fe251cb0bbc0cca1fea389a4ac/Example/JKSwiftExtension/Images.xcassets/mark_highlighted.imageset/mark_highlighted@3x.png -------------------------------------------------------------------------------- /Example/JKSwiftExtension/Images.xcassets/network_error.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "network_error@2x.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "filename" : "network_error@3x.png", 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "author" : "xcode", 20 | "version" : 1 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /Example/JKSwiftExtension/Images.xcassets/network_error.imageset/network_error@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JoanKing/JKSwiftExtension/60ed6ddc03b541fe251cb0bbc0cca1fea389a4ac/Example/JKSwiftExtension/Images.xcassets/network_error.imageset/network_error@2x.png -------------------------------------------------------------------------------- /Example/JKSwiftExtension/Images.xcassets/network_error.imageset/network_error@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JoanKing/JKSwiftExtension/60ed6ddc03b541fe251cb0bbc0cca1fea389a4ac/Example/JKSwiftExtension/Images.xcassets/network_error.imageset/network_error@3x.png -------------------------------------------------------------------------------- /Example/JKSwiftExtension/Images.xcassets/pika3.dataset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "data" : [ 3 | { 4 | "filename" : "pika3.gif", 5 | "idiom" : "universal" 6 | } 7 | ], 8 | "info" : { 9 | "author" : "xcode", 10 | "version" : 1 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /Example/JKSwiftExtension/Images.xcassets/pika3.dataset/pika3.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JoanKing/JKSwiftExtension/60ed6ddc03b541fe251cb0bbc0cca1fea389a4ac/Example/JKSwiftExtension/Images.xcassets/pika3.dataset/pika3.gif -------------------------------------------------------------------------------- /Example/JKSwiftExtension/Images.xcassets/qr_test.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "qr_test.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 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 | -------------------------------------------------------------------------------- /Example/JKSwiftExtension/Images.xcassets/qr_test.imageset/qr_test.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JoanKing/JKSwiftExtension/60ed6ddc03b541fe251cb0bbc0cca1fea389a4ac/Example/JKSwiftExtension/Images.xcassets/qr_test.imageset/qr_test.png -------------------------------------------------------------------------------- /Example/JKSwiftExtension/Images.xcassets/rank_up.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "rank_up@2x.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "filename" : "rank_up@3x.png", 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "author" : "xcode", 20 | "version" : 1 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /Example/JKSwiftExtension/Images.xcassets/rank_up.imageset/rank_up@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JoanKing/JKSwiftExtension/60ed6ddc03b541fe251cb0bbc0cca1fea389a4ac/Example/JKSwiftExtension/Images.xcassets/rank_up.imageset/rank_up@2x.png -------------------------------------------------------------------------------- /Example/JKSwiftExtension/Images.xcassets/rank_up.imageset/rank_up@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JoanKing/JKSwiftExtension/60ed6ddc03b541fe251cb0bbc0cca1fea389a4ac/Example/JKSwiftExtension/Images.xcassets/rank_up.imageset/rank_up@3x.png -------------------------------------------------------------------------------- /Example/JKSwiftExtension/Images.xcassets/refresh.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "refresh@2x.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "filename" : "refresh@3x.png", 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "author" : "xcode", 20 | "version" : 1 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /Example/JKSwiftExtension/Images.xcassets/refresh.imageset/refresh@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JoanKing/JKSwiftExtension/60ed6ddc03b541fe251cb0bbc0cca1fea389a4ac/Example/JKSwiftExtension/Images.xcassets/refresh.imageset/refresh@2x.png -------------------------------------------------------------------------------- /Example/JKSwiftExtension/Images.xcassets/refresh.imageset/refresh@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JoanKing/JKSwiftExtension/60ed6ddc03b541fe251cb0bbc0cca1fea389a4ac/Example/JKSwiftExtension/Images.xcassets/refresh.imageset/refresh@3x.png -------------------------------------------------------------------------------- /Example/JKSwiftExtension/Images.xcassets/screen_no_content.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "screen_no_content@2x.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "filename" : "screen_no_content@3x.png", 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "author" : "xcode", 20 | "version" : 1 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /Example/JKSwiftExtension/Images.xcassets/screen_no_content.imageset/screen_no_content@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JoanKing/JKSwiftExtension/60ed6ddc03b541fe251cb0bbc0cca1fea389a4ac/Example/JKSwiftExtension/Images.xcassets/screen_no_content.imageset/screen_no_content@2x.png -------------------------------------------------------------------------------- /Example/JKSwiftExtension/Images.xcassets/screen_no_content.imageset/screen_no_content@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JoanKing/JKSwiftExtension/60ed6ddc03b541fe251cb0bbc0cca1fea389a4ac/Example/JKSwiftExtension/Images.xcassets/screen_no_content.imageset/screen_no_content@3x.png -------------------------------------------------------------------------------- /Example/JKSwiftExtension/Images.xcassets/screen_no_network.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "screen_no_network@2x.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "filename" : "screen_no_network@3x.png", 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "author" : "xcode", 20 | "version" : 1 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /Example/JKSwiftExtension/Images.xcassets/screen_no_network.imageset/screen_no_network@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JoanKing/JKSwiftExtension/60ed6ddc03b541fe251cb0bbc0cca1fea389a4ac/Example/JKSwiftExtension/Images.xcassets/screen_no_network.imageset/screen_no_network@2x.png -------------------------------------------------------------------------------- /Example/JKSwiftExtension/Images.xcassets/screen_no_network.imageset/screen_no_network@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JoanKing/JKSwiftExtension/60ed6ddc03b541fe251cb0bbc0cca1fea389a4ac/Example/JKSwiftExtension/Images.xcassets/screen_no_network.imageset/screen_no_network@3x.png -------------------------------------------------------------------------------- /Example/JKSwiftExtension/Images.xcassets/selected_point_animation.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "selected_point_animation@2x.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "filename" : "selected_point_animation@3x.png", 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "author" : "xcode", 20 | "version" : 1 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /Example/JKSwiftExtension/Images.xcassets/selected_point_animation.imageset/selected_point_animation@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JoanKing/JKSwiftExtension/60ed6ddc03b541fe251cb0bbc0cca1fea389a4ac/Example/JKSwiftExtension/Images.xcassets/selected_point_animation.imageset/selected_point_animation@2x.png -------------------------------------------------------------------------------- /Example/JKSwiftExtension/Images.xcassets/selected_point_animation.imageset/selected_point_animation@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JoanKing/JKSwiftExtension/60ed6ddc03b541fe251cb0bbc0cca1fea389a4ac/Example/JKSwiftExtension/Images.xcassets/selected_point_animation.imageset/selected_point_animation@3x.png -------------------------------------------------------------------------------- /Example/JKSwiftExtension/Images.xcassets/selected_point_circle.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "selected_point_circle@2x.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "filename" : "selected_point_circle@3x.png", 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "author" : "xcode", 20 | "version" : 1 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /Example/JKSwiftExtension/Images.xcassets/selected_point_circle.imageset/selected_point_circle@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JoanKing/JKSwiftExtension/60ed6ddc03b541fe251cb0bbc0cca1fea389a4ac/Example/JKSwiftExtension/Images.xcassets/selected_point_circle.imageset/selected_point_circle@2x.png -------------------------------------------------------------------------------- /Example/JKSwiftExtension/Images.xcassets/selected_point_circle.imageset/selected_point_circle@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JoanKing/JKSwiftExtension/60ed6ddc03b541fe251cb0bbc0cca1fea389a4ac/Example/JKSwiftExtension/Images.xcassets/selected_point_circle.imageset/selected_point_circle@3x.png -------------------------------------------------------------------------------- /Example/JKSwiftExtension/Images.xcassets/sender.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "sender@2x.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "filename" : "sender@3x.png", 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "author" : "xcode", 20 | "version" : 1 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /Example/JKSwiftExtension/Images.xcassets/sender.imageset/sender@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JoanKing/JKSwiftExtension/60ed6ddc03b541fe251cb0bbc0cca1fea389a4ac/Example/JKSwiftExtension/Images.xcassets/sender.imageset/sender@2x.png -------------------------------------------------------------------------------- /Example/JKSwiftExtension/Images.xcassets/sender.imageset/sender@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JoanKing/JKSwiftExtension/60ed6ddc03b541fe251cb0bbc0cca1fea389a4ac/Example/JKSwiftExtension/Images.xcassets/sender.imageset/sender@3x.png -------------------------------------------------------------------------------- /Example/JKSwiftExtension/Images.xcassets/tabbar_item_home.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "appearances" : [ 9 | { 10 | "appearance" : "luminosity", 11 | "value" : "dark" 12 | } 13 | ], 14 | "idiom" : "universal", 15 | "scale" : "1x" 16 | }, 17 | { 18 | "filename" : "tabbar_item_home@2x.png", 19 | "idiom" : "universal", 20 | "scale" : "2x" 21 | }, 22 | { 23 | "appearances" : [ 24 | { 25 | "appearance" : "luminosity", 26 | "value" : "dark" 27 | } 28 | ], 29 | "filename" : "tabbar_item_home@2x-1.png", 30 | "idiom" : "universal", 31 | "scale" : "2x" 32 | }, 33 | { 34 | "filename" : "tabbar_item_home@3x.png", 35 | "idiom" : "universal", 36 | "scale" : "3x" 37 | }, 38 | { 39 | "appearances" : [ 40 | { 41 | "appearance" : "luminosity", 42 | "value" : "dark" 43 | } 44 | ], 45 | "filename" : "tabbar_item_home@3x-1.png", 46 | "idiom" : "universal", 47 | "scale" : "3x" 48 | } 49 | ], 50 | "info" : { 51 | "author" : "xcode", 52 | "version" : 1 53 | } 54 | } 55 | -------------------------------------------------------------------------------- /Example/JKSwiftExtension/Images.xcassets/tabbar_item_home.imageset/tabbar_item_home@2x-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JoanKing/JKSwiftExtension/60ed6ddc03b541fe251cb0bbc0cca1fea389a4ac/Example/JKSwiftExtension/Images.xcassets/tabbar_item_home.imageset/tabbar_item_home@2x-1.png -------------------------------------------------------------------------------- /Example/JKSwiftExtension/Images.xcassets/tabbar_item_home.imageset/tabbar_item_home@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JoanKing/JKSwiftExtension/60ed6ddc03b541fe251cb0bbc0cca1fea389a4ac/Example/JKSwiftExtension/Images.xcassets/tabbar_item_home.imageset/tabbar_item_home@2x.png -------------------------------------------------------------------------------- /Example/JKSwiftExtension/Images.xcassets/tabbar_item_home.imageset/tabbar_item_home@3x-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JoanKing/JKSwiftExtension/60ed6ddc03b541fe251cb0bbc0cca1fea389a4ac/Example/JKSwiftExtension/Images.xcassets/tabbar_item_home.imageset/tabbar_item_home@3x-1.png -------------------------------------------------------------------------------- /Example/JKSwiftExtension/Images.xcassets/tabbar_item_home.imageset/tabbar_item_home@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JoanKing/JKSwiftExtension/60ed6ddc03b541fe251cb0bbc0cca1fea389a4ac/Example/JKSwiftExtension/Images.xcassets/tabbar_item_home.imageset/tabbar_item_home@3x.png -------------------------------------------------------------------------------- /Example/JKSwiftExtension/Images.xcassets/tabbar_profile.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "tabbar_profile@2x.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "filename" : "tabbar_profile@3x.png", 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "author" : "xcode", 20 | "version" : 1 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /Example/JKSwiftExtension/Images.xcassets/tabbar_profile.imageset/tabbar_profile@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JoanKing/JKSwiftExtension/60ed6ddc03b541fe251cb0bbc0cca1fea389a4ac/Example/JKSwiftExtension/Images.xcassets/tabbar_profile.imageset/tabbar_profile@2x.png -------------------------------------------------------------------------------- /Example/JKSwiftExtension/Images.xcassets/tabbar_profile.imageset/tabbar_profile@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JoanKing/JKSwiftExtension/60ed6ddc03b541fe251cb0bbc0cca1fea389a4ac/Example/JKSwiftExtension/Images.xcassets/tabbar_profile.imageset/tabbar_profile@3x.png -------------------------------------------------------------------------------- /Example/JKSwiftExtension/Images.xcassets/tabbar_profile_selected.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "tabbar_profile_selected@2x.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "filename" : "tabbar_profile_selected@3x.png", 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "author" : "xcode", 20 | "version" : 1 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /Example/JKSwiftExtension/Images.xcassets/tabbar_profile_selected.imageset/tabbar_profile_selected@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JoanKing/JKSwiftExtension/60ed6ddc03b541fe251cb0bbc0cca1fea389a4ac/Example/JKSwiftExtension/Images.xcassets/tabbar_profile_selected.imageset/tabbar_profile_selected@2x.png -------------------------------------------------------------------------------- /Example/JKSwiftExtension/Images.xcassets/tabbar_profile_selected.imageset/tabbar_profile_selected@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JoanKing/JKSwiftExtension/60ed6ddc03b541fe251cb0bbc0cca1fea389a4ac/Example/JKSwiftExtension/Images.xcassets/tabbar_profile_selected.imageset/tabbar_profile_selected@3x.png -------------------------------------------------------------------------------- /Example/JKSwiftExtension/Images.xcassets/testicon.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "testicon.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 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 | -------------------------------------------------------------------------------- /Example/JKSwiftExtension/Images.xcassets/testicon.imageset/testicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JoanKing/JKSwiftExtension/60ed6ddc03b541fe251cb0bbc0cca1fea389a4ac/Example/JKSwiftExtension/Images.xcassets/testicon.imageset/testicon.png -------------------------------------------------------------------------------- /Example/JKSwiftExtension/Images.xcassets/tfboy.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "tfboy.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 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 | -------------------------------------------------------------------------------- /Example/JKSwiftExtension/Images.xcassets/tfboy.imageset/tfboy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JoanKing/JKSwiftExtension/60ed6ddc03b541fe251cb0bbc0cca1fea389a4ac/Example/JKSwiftExtension/Images.xcassets/tfboy.imageset/tfboy.png -------------------------------------------------------------------------------- /Example/JKSwiftExtension/Images.xcassets/trade_validperiod.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "trade_validperiod@2x.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "filename" : "trade_validperiod@3x.png", 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "author" : "xcode", 20 | "version" : 1 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /Example/JKSwiftExtension/Images.xcassets/trade_validperiod.imageset/trade_validperiod@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JoanKing/JKSwiftExtension/60ed6ddc03b541fe251cb0bbc0cca1fea389a4ac/Example/JKSwiftExtension/Images.xcassets/trade_validperiod.imageset/trade_validperiod@2x.png -------------------------------------------------------------------------------- /Example/JKSwiftExtension/Images.xcassets/trade_validperiod.imageset/trade_validperiod@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JoanKing/JKSwiftExtension/60ed6ddc03b541fe251cb0bbc0cca1fea389a4ac/Example/JKSwiftExtension/Images.xcassets/trade_validperiod.imageset/trade_validperiod@3x.png -------------------------------------------------------------------------------- /Example/JKSwiftExtension/Images.xcassets/trade_validperiod_selected.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "trade_validperiod_selected@2x.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "filename" : "trade_validperiod_selected@3x.png", 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "author" : "xcode", 20 | "version" : 1 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /Example/JKSwiftExtension/Images.xcassets/trade_validperiod_selected.imageset/trade_validperiod_selected@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JoanKing/JKSwiftExtension/60ed6ddc03b541fe251cb0bbc0cca1fea389a4ac/Example/JKSwiftExtension/Images.xcassets/trade_validperiod_selected.imageset/trade_validperiod_selected@2x.png -------------------------------------------------------------------------------- /Example/JKSwiftExtension/Images.xcassets/trade_validperiod_selected.imageset/trade_validperiod_selected@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JoanKing/JKSwiftExtension/60ed6ddc03b541fe251cb0bbc0cca1fea389a4ac/Example/JKSwiftExtension/Images.xcassets/trade_validperiod_selected.imageset/trade_validperiod_selected@3x.png -------------------------------------------------------------------------------- /Example/JKSwiftExtension/Images.xcassets/yy.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "yy.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 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 | -------------------------------------------------------------------------------- /Example/JKSwiftExtension/Images.xcassets/yy.imageset/yy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JoanKing/JKSwiftExtension/60ed6ddc03b541fe251cb0bbc0cca1fea389a4ac/Example/JKSwiftExtension/Images.xcassets/yy.imageset/yy.png -------------------------------------------------------------------------------- /Example/JKSwiftExtension/Images.xcassets/特殊配置/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /Example/JKSwiftExtension/Images.xcassets/特殊配置/special_configuration_off.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "special_configuration_off@2x.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "filename" : "special_configuration_off@3x.png", 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "author" : "xcode", 20 | "version" : 1 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /Example/JKSwiftExtension/Images.xcassets/特殊配置/special_configuration_off.imageset/special_configuration_off@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JoanKing/JKSwiftExtension/60ed6ddc03b541fe251cb0bbc0cca1fea389a4ac/Example/JKSwiftExtension/Images.xcassets/特殊配置/special_configuration_off.imageset/special_configuration_off@2x.png -------------------------------------------------------------------------------- /Example/JKSwiftExtension/Images.xcassets/特殊配置/special_configuration_off.imageset/special_configuration_off@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JoanKing/JKSwiftExtension/60ed6ddc03b541fe251cb0bbc0cca1fea389a4ac/Example/JKSwiftExtension/Images.xcassets/特殊配置/special_configuration_off.imageset/special_configuration_off@3x.png -------------------------------------------------------------------------------- /Example/JKSwiftExtension/Images.xcassets/特殊配置/special_configuration_off_selected.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "special_configuration_off_selected@2x.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "filename" : "special_configuration_off_selected@3x.png", 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "author" : "xcode", 20 | "version" : 1 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /Example/JKSwiftExtension/Images.xcassets/特殊配置/special_configuration_off_selected.imageset/special_configuration_off_selected@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JoanKing/JKSwiftExtension/60ed6ddc03b541fe251cb0bbc0cca1fea389a4ac/Example/JKSwiftExtension/Images.xcassets/特殊配置/special_configuration_off_selected.imageset/special_configuration_off_selected@2x.png -------------------------------------------------------------------------------- /Example/JKSwiftExtension/Images.xcassets/特殊配置/special_configuration_off_selected.imageset/special_configuration_off_selected@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JoanKing/JKSwiftExtension/60ed6ddc03b541fe251cb0bbc0cca1fea389a4ac/Example/JKSwiftExtension/Images.xcassets/特殊配置/special_configuration_off_selected.imageset/special_configuration_off_selected@3x.png -------------------------------------------------------------------------------- /Example/JKSwiftExtension/Images.xcassets/特殊配置/special_configuration_on.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "special_configuration_on@2x.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "filename" : "special_configuration_on@3x.png", 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "author" : "xcode", 20 | "version" : 1 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /Example/JKSwiftExtension/Images.xcassets/特殊配置/special_configuration_on.imageset/special_configuration_on@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JoanKing/JKSwiftExtension/60ed6ddc03b541fe251cb0bbc0cca1fea389a4ac/Example/JKSwiftExtension/Images.xcassets/特殊配置/special_configuration_on.imageset/special_configuration_on@2x.png -------------------------------------------------------------------------------- /Example/JKSwiftExtension/Images.xcassets/特殊配置/special_configuration_on.imageset/special_configuration_on@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JoanKing/JKSwiftExtension/60ed6ddc03b541fe251cb0bbc0cca1fea389a4ac/Example/JKSwiftExtension/Images.xcassets/特殊配置/special_configuration_on.imageset/special_configuration_on@3x.png -------------------------------------------------------------------------------- /Example/JKSwiftExtension/Images.xcassets/特殊配置/special_configuration_on_selected.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "special_configuration_on_selected@2x.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "filename" : "special_configuration_on_selected@3x.png", 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "author" : "xcode", 20 | "version" : 1 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /Example/JKSwiftExtension/Images.xcassets/特殊配置/special_configuration_on_selected.imageset/special_configuration_on_selected@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JoanKing/JKSwiftExtension/60ed6ddc03b541fe251cb0bbc0cca1fea389a4ac/Example/JKSwiftExtension/Images.xcassets/特殊配置/special_configuration_on_selected.imageset/special_configuration_on_selected@2x.png -------------------------------------------------------------------------------- /Example/JKSwiftExtension/Images.xcassets/特殊配置/special_configuration_on_selected.imageset/special_configuration_on_selected@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JoanKing/JKSwiftExtension/60ed6ddc03b541fe251cb0bbc0cca1fea389a4ac/Example/JKSwiftExtension/Images.xcassets/特殊配置/special_configuration_on_selected.imageset/special_configuration_on_selected@3x.png -------------------------------------------------------------------------------- /Example/JKSwiftExtension/JKBaseKit.bundle/JKBank.plist: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JoanKing/JKSwiftExtension/60ed6ddc03b541fe251cb0bbc0cca1fea389a4ac/Example/JKSwiftExtension/JKBaseKit.bundle/JKBank.plist -------------------------------------------------------------------------------- /Example/JKSwiftExtension/JKBaseKit.bundle/icon_scan@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JoanKing/JKSwiftExtension/60ed6ddc03b541fe251cb0bbc0cca1fea389a4ac/Example/JKSwiftExtension/JKBaseKit.bundle/icon_scan@2x.png -------------------------------------------------------------------------------- /Example/JKSwiftExtension/JKBaseKit.bundle/icon_scan@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JoanKing/JKSwiftExtension/60ed6ddc03b541fe251cb0bbc0cca1fea389a4ac/Example/JKSwiftExtension/JKBaseKit.bundle/icon_scan@3x.png -------------------------------------------------------------------------------- /Example/JKSwiftExtension/JKSwiftExtension_Example-Bridging-Header.h: -------------------------------------------------------------------------------- 1 | // 2 | // Use this file to import your target's public headers that you would like to expose to Swift. 3 | // 4 | 5 | #import 6 | #import 7 | 8 | #import "NotificationTetstViewController.h" 9 | -------------------------------------------------------------------------------- /Example/JKSwiftExtension/Persons.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Name 6 | 王小二 7 | age 8 | 22 9 | height 10 | 178 11 | 12 | 13 | -------------------------------------------------------------------------------- /Example/JKSwiftExtension/PrefixHeader.pch: -------------------------------------------------------------------------------- 1 | // 2 | // PrefixHeader.pch 3 | // JKSwiftExtension_Example 4 | // 5 | // Created by 王冲 on 2022/6/28. 6 | // Copyright © 2022 CocoaPods. All rights reserved. 7 | // 8 | 9 | #ifndef PrefixHeader_pch 10 | #define PrefixHeader_pch 11 | 12 | #import 13 | 14 | #endif /* PrefixHeader_pch */ 15 | -------------------------------------------------------------------------------- /Example/JKSwiftExtension/PrivacyInfo.xcprivacy: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | NSPrivacyAccessedAPITypes 6 | 7 | 8 | NSPrivacyAccessedAPITypeReasons 9 | 10 | 35F9.1 11 | 12 | NSPrivacyAccessedAPIType 13 | NSPrivacyAccessedAPICategorySystemBootTime 14 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /Example/JKSwiftExtension/StoryboardTest/StoryboardTest1ViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // StoryboardTest1ViewController.swift 3 | // JKSwiftExtension_Example 4 | // 5 | // Created by IronMan on 2020/12/16. 6 | // Copyright © 2020 CocoaPods. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | class StoryboardTest1ViewController: UIViewController { 12 | 13 | override func viewDidLoad() { 14 | super.viewDidLoad() 15 | 16 | // Do any additional setup after loading the view. 17 | } 18 | 19 | 20 | /* 21 | // MARK: - Navigation 22 | 23 | // In a storyboard-based application, you will often want to do a little preparation before navigation 24 | override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 25 | // Get the new view controller using segue.destination. 26 | // Pass the selected object to the new view controller. 27 | } 28 | */ 29 | 30 | } 31 | -------------------------------------------------------------------------------- /Example/JKSwiftExtension/TestFile/Controller/BleViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // BleViewController.swift 3 | // JKSwiftExtension_Example 4 | // 5 | // Created by 王冲 on 2023/6/19. 6 | // Copyright © 2023 CocoaPods. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | class BleViewController: BaseViewController { 12 | 13 | override func viewDidLoad() { 14 | super.viewDidLoad() 15 | 16 | // 1100000 : 96 17 | // 100000 0x20 101 18 | let value1 = (0b0000101000 & (0b11 << 8)) >> 8 19 | let value2 = (0b0100101000 & (0b11 << 8)) >> 8 20 | let value3 = (0b1000101000 & (0b11 << 8)) >> 8 21 | let value4 = (0b1100101000 & (0b11 << 8)) >> 8 22 | debugPrint("value1: \(value1) value2: \(value2) value3: \(value3) value4: \(value4)") 23 | 24 | let param: [String: Any] = ["test": false] 25 | if let test = param["test"] as? Bool { 26 | debugPrint("类型判断✅:\(test)") 27 | } else { 28 | debugPrint("类型判断❎") 29 | } 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /Example/JKSwiftExtension/TestFile/Controller/NineViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // NineViewController.swift 3 | // JKSwiftExtension_Example 4 | // 5 | // Created by IronMan on 2021/10/11. 6 | // Copyright © 2021 CocoaPods. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | class NineViewController: UIViewController { 12 | 13 | override func viewDidLoad() { 14 | super.viewDidLoad() 15 | 16 | self.view.jk.gradientColor(.vertical, [UIColor.brown.cgColor, UIColor.green.cgColor]) 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /Example/JKSwiftExtension/TestFile/Controller/Notification+Extension.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Notification+Extension.swift 3 | // JKSwiftExtension_Example 4 | // 5 | // Created by IronMan on 2020/9/25. 6 | // Copyright © 2020 CocoaPods. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | extension Notification.Name { 12 | 13 | static let FBTradeHomeListDataNotification = Notification.Name(rawValue: "FBTradeHomeListDataNotification") 14 | } 15 | -------------------------------------------------------------------------------- /Example/JKSwiftExtension/TestFile/Controller/NotificationTetstViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // NotificationTetstViewController.h 3 | // JKSwiftExtension_Example 4 | // 5 | // Created by 王冲 on 2022/3/22. 6 | // Copyright © 2022 CocoaPods. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | @interface NotificationTetstViewController : UIViewController 14 | 15 | @end 16 | 17 | NS_ASSUME_NONNULL_END 18 | -------------------------------------------------------------------------------- /Example/JKSwiftExtension/TestFile/Controller/PresetntOneViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // PresetntOneViewController.swift 3 | // JKSwiftExtension_Example 4 | // 5 | // Created by 王冲 on 2022/9/24. 6 | // Copyright © 2022 CocoaPods. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | class PresetntOneViewController: UIViewController { 12 | 13 | override func viewDidLoad() { 14 | super.viewDidLoad() 15 | self.title = "One" 16 | self.view.backgroundColor = .brown 17 | } 18 | 19 | override func touchesBegan(_ touches: Set, with event: UIEvent?) { 20 | 21 | let vc = UINavigationController(rootViewController: PresetntTwoViewController()) 22 | vc.modalPresentationStyle = .fullScreen 23 | // 渐变出来 24 | vc.modalTransitionStyle = .crossDissolve 25 | self.present(vc, animated: true, completion: nil) 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /Example/JKSwiftExtension/TestFile/Controller/PresetntThreeViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // PresetntThreeViewController.swift 3 | // JKSwiftExtension_Example 4 | // 5 | // Created by 王冲 on 2022/9/24. 6 | // Copyright © 2022 CocoaPods. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | class PresetntThreeViewController: UIViewController { 12 | 13 | override func viewDidLoad() { 14 | super.viewDidLoad() 15 | self.title = "Three" 16 | self.view.backgroundColor = .brown 17 | } 18 | 19 | override func touchesBegan(_ touches: Set, with event: UIEvent?) { 20 | 21 | let vc = UINavigationController(rootViewController: PresetntFourViewController()) 22 | vc.modalPresentationStyle = .fullScreen 23 | // 渐变出来 24 | vc.modalTransitionStyle = .crossDissolve 25 | self.present(vc, animated: true, completion: nil) 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /Example/JKSwiftExtension/TestFile/Controller/PresetntTwoViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // PresetntTwoViewController.swift 3 | // JKSwiftExtension_Example 4 | // 5 | // Created by 王冲 on 2022/9/24. 6 | // Copyright © 2022 CocoaPods. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | class PresetntTwoViewController: UIViewController { 12 | 13 | override func viewDidLoad() { 14 | super.viewDidLoad() 15 | self.title = "Two" 16 | self.view.backgroundColor = .brown 17 | } 18 | 19 | override func touchesBegan(_ touches: Set, with event: UIEvent?) { 20 | 21 | let vc = UINavigationController(rootViewController: PresetntThreeViewController()) 22 | vc.modalPresentationStyle = .fullScreen 23 | // 渐变出来 24 | vc.modalTransitionStyle = .crossDissolve 25 | self.present(vc, animated: true, completion: nil) 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /Example/JKSwiftExtension/TestFile/Controller/ProfileViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ProfileViewController.swift 3 | // JKSwiftExtension_Example 4 | // 5 | // Created by IronMan on 2022/2/15. 6 | // Copyright © 2022 CocoaPods. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | class ProfileViewController: UIViewController { 12 | 13 | override func viewDidLoad() { 14 | super.viewDidLoad() 15 | 16 | self.view.backgroundColor = .cBackViewColor 17 | 18 | let person = Person() 19 | person.addObserver(self, forKeyPath: "age", options: [.old, .new], context: nil) 20 | // 1、使用setter方法改变值KVO才会生效 21 | person.age = 2 22 | // 2、通过KVC改变value 23 | person.setValue(5, forKey: "age") 24 | // 3、手动触发KVO 25 | // person.willChangeValue(forKey: "age") 26 | debugPrint("----------") 27 | person.addValue() 28 | // person.didChangeValue(forKey: "age") 29 | } 30 | 31 | deinit { 32 | debugPrint("----------") 33 | } 34 | 35 | override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) { 36 | debugPrint(keyPath ?? "") 37 | if let old = change?[NSKeyValueChangeKey.oldKey] { 38 | debugPrint(old) 39 | } 40 | if let new = change?[NSKeyValueChangeKey.newKey] { 41 | debugPrint(new) 42 | } 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /Example/JKSwiftExtension/TestFile/Controller/TouchViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // TouchViewController.swift 3 | // JKSwiftExtension_Example 4 | // 5 | // Created by IronMan on 2020/11/19. 6 | // Copyright © 2020 CocoaPods. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | class TouchViewController: UIViewController { 12 | 13 | override func viewDidLoad() { 14 | super.viewDidLoad() 15 | 16 | self.view.backgroundColor = .red 17 | 18 | let greenView = UIView(frame: CGRect(x: 100, y: 150, width: 200, height: 200)) 19 | greenView.backgroundColor = .green 20 | self.view.addSubview(greenView) 21 | 22 | let yellowView = JKTouchView(frame: CGRect(x: 30, y: 30, width: 140, height: 140)) 23 | yellowView.backgroundColor = .yellow 24 | greenView.addSubview(yellowView) 25 | 26 | let tap = UITapGestureRecognizer(target: self, action: #selector(click1)) 27 | yellowView.addGestureRecognizer(tap) 28 | 29 | } 30 | 31 | @objc func click1() { 32 | JKPrint("---------") 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /Example/JKSwiftExtension/TestFile/Extension/Image+Photo.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Image+Photo.swift 3 | // JKSwiftExtension_Example 4 | // 5 | // Created by chongwang on 2024/7/5. 6 | // Copyright © 2024 CocoaPods. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | import Photos 11 | 12 | // MARK: - 一、基本的扩展 13 | extension UIImage { 14 | 15 | // MARK: 1.15、保存图片到相册(建议使用这个) 16 | /// 保存图片到相册 17 | func savePhotosImageToAlbum(completion: @escaping ((Bool, Error?) -> Void)) { 18 | PHPhotoLibrary.shared().performChanges { 19 | PHAssetChangeRequest.creationRequestForAsset(from: self) 20 | } completionHandler: { (isSuccess: Bool, error: Error?) in 21 | completion(isSuccess, error) 22 | } 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /Example/JKSwiftExtension/TestFile/Extension/UIApplication+Photo.swift: -------------------------------------------------------------------------------- 1 | // 2 | // UIApplication+Photo.swift 3 | // JKSwiftExtension_Example 4 | // 5 | // Created by chongwang on 2024/7/6. 6 | // Copyright © 2024 CocoaPods. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | import Photos 11 | 12 | // MARK: - 二、APP权限的检测 13 | enum JKAppPermissionType { 14 | // 照相机 15 | case camera 16 | // 相册 17 | case album 18 | // 麦克风 19 | case audio 20 | // 定位 21 | case location 22 | } 23 | extension UIApplication { 24 | 25 | // MARK: 2.1、判断是否拥有权限,目前支持 照相机、相册、麦克风、定位,提示:这里判断是这些权限有没有被用户手动关闭 26 | /// 判断是否拥有权限,目前支持 照相机、相册、麦克风、定位,提示:这里判断是这些权限有没有被用户手动关闭 27 | /// - Parameter permission: 权限的类型 28 | /// - Returns: 结果 29 | static func isOpenPermission(_ permission: JKAppPermissionType) -> Bool { 30 | 31 | var result: Bool = true 32 | if permission == .camera || permission == .audio { 33 | // 是否开启相机和麦克风权限 34 | let authStatus = AVCaptureDevice.authorizationStatus(for: permission == .camera ? .video : .audio) 35 | result = authStatus != .restricted && authStatus != .denied 36 | } else if permission == .album { 37 | // 是否开启相册权限 38 | let authStatus = PHPhotoLibrary.authorizationStatus() 39 | result = authStatus != .restricted && authStatus != .denied 40 | } else if permission == .location { 41 | // 是否开启定位权限 42 | let authStatus = CLLocationManager.authorizationStatus() 43 | return authStatus != .restricted && authStatus != .denied 44 | } 45 | return result 46 | } 47 | } 48 | -------------------------------------------------------------------------------- /Example/JKSwiftExtension/TestFile/FiveViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // FiveViewController.swift 3 | // JKSwiftExtension_Example 4 | // 5 | // Created by IronMan on 2020/11/11. 6 | // Copyright © 2020 CocoaPods. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | class FiveViewController: UIViewController { 12 | 13 | override func viewDidLoad() { 14 | super.viewDidLoad() 15 | 16 | self.title = "Five" 17 | self.edgesForExtendedLayout = [] 18 | self.view.backgroundColor = UIColor.randomColor 19 | } 20 | 21 | override func touchesBegan(_ touches: Set, with event: UIEvent?) { 22 | self.navigationController?.pushViewController(SixViewController(), animated: true) 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /Example/JKSwiftExtension/TestFile/FourViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // FourViewController.swift 3 | // JKSwiftExtension_Example 4 | // 5 | // Created by IronMan on 2020/11/11. 6 | // Copyright © 2020 CocoaPods. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | class FourViewController: UIViewController { 12 | 13 | override func viewDidLoad() { 14 | super.viewDidLoad() 15 | 16 | self.title = "Four" 17 | self.edgesForExtendedLayout = [] 18 | self.view.backgroundColor = UIColor.randomColor 19 | } 20 | 21 | override func touchesBegan(_ touches: Set, with event: UIEvent?) { 22 | self.navigationController?.pushViewController(FiveViewController(), animated: true) 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /Example/JKSwiftExtension/TestFile/Notification+Extension.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Notification+Extension.swift 3 | // JKSwiftExtension_Example 4 | // 5 | // Created by IronMan on 2020/9/25. 6 | // Copyright © 2020 CocoaPods. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | extension Notification.Name { 12 | 13 | static let FBTradeHomeListDataNotification = Notification.Name(rawValue: "FBTradeHomeListDataNotification") 14 | } 15 | -------------------------------------------------------------------------------- /Example/JKSwiftExtension/TestFile/View/JKTouchView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // JKTouchView.swift 3 | // JKSwiftExtension_Example 4 | // 5 | // Created by IronMan on 2020/11/19. 6 | // Copyright © 2020 CocoaPods. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | class JKTouchView: UIView { 12 | 13 | /// 范围 <= 0 14 | var minX: CGFloat = 0 15 | /// 范围 <= 0 16 | var minY: CGFloat = 0 17 | /// 范围 >= 0 18 | var maxX: CGFloat = 0 19 | /// 范围 >= 0 20 | var maxY: CGFloat = 0 21 | 22 | override func hitTest(_ point: CGPoint, with event: UIEvent?) -> UIView? { 23 | 24 | guard point.x <= maxX && point.x >= minX + self.frame.size.width && point.y <= maxY + self.frame.size.height && point.y >= minY else { 25 | return super.hitTest(point, with: event) 26 | } 27 | return super.hitTest(CGPoint(x: 0, y: 0), with: event) 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /Example/JKSwiftExtension/TestFile/View/UIAlertController+Extension1.swift: -------------------------------------------------------------------------------- 1 | // 2 | // UIAlertController+Extension1.swift 3 | // JKSwiftExtension_Example 4 | // 5 | // Created by 王冲 on 2022/8/24. 6 | // Copyright © 2022 CocoaPods. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | import UIKit 11 | import JKSwiftExtension 12 | @objc public extension UIAlertController { 13 | 14 | private var subView5: UIView? { 15 | guard let subView1: UIView = self.view.subviews.first, 16 | let subView2: UIView = subView1.subviews.first, 17 | let subView3: UIView = subView2.subviews.first, 18 | let subView4: UIView = subView3.subviews.first, 19 | let subView5: UIView = subView4.subviews.first 20 | else { return nil } 21 | return subView5 22 | } 23 | 24 | var titleLabel: UILabel? { 25 | guard let _ = self.title, 26 | let subView5 = subView5, 27 | subView5.subviews.count > 2, 28 | let label = subView5.subviews[1] as? UILabel 29 | else { return nil } 30 | return label 31 | } 32 | 33 | var messageLabel: UILabel? { 34 | guard let subView5 = subView5 35 | else { return nil } 36 | let messageLabelIndex = self.title == nil ? 1 : 2 37 | if subView5.subviews.count > messageLabelIndex, 38 | let label = subView5.subviews[messageLabelIndex] as? UILabel 39 | { 40 | return label 41 | } 42 | return nil 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /Example/JKSwiftExtension/baby.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JoanKing/JKSwiftExtension/60ed6ddc03b541fe251cb0bbc0cca1fea389a4ac/Example/JKSwiftExtension/baby.gif -------------------------------------------------------------------------------- /Example/JKSwiftExtension/en.lproj/Localizable.strings: -------------------------------------------------------------------------------- 1 | /* 2 | Localizable.strings 3 | JKSwiftExtension 4 | 5 | Created by chongwang on 2024/4/26. 6 | Copyright © 2024 CocoaPods. All rights reserved. 7 | */ 8 | 9 | "Text_01" = "banana"; 10 | -------------------------------------------------------------------------------- /Example/JKSwiftExtension/font/din-2014_bold-italic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JoanKing/JKSwiftExtension/60ed6ddc03b541fe251cb0bbc0cca1fea389a4ac/Example/JKSwiftExtension/font/din-2014_bold-italic.ttf -------------------------------------------------------------------------------- /Example/JKSwiftExtension/font/fanghei.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JoanKing/JKSwiftExtension/60ed6ddc03b541fe251cb0bbc0cca1fea389a4ac/Example/JKSwiftExtension/font/fanghei.ttf -------------------------------------------------------------------------------- /Example/JKSwiftExtension/font/niu1.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JoanKing/JKSwiftExtension/60ed6ddc03b541fe251cb0bbc0cca1fea389a4ac/Example/JKSwiftExtension/font/niu1.ttf -------------------------------------------------------------------------------- /Example/JKSwiftExtension/girl.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JoanKing/JKSwiftExtension/60ed6ddc03b541fe251cb0bbc0cca1fea389a4ac/Example/JKSwiftExtension/girl.jpg -------------------------------------------------------------------------------- /Example/JKSwiftExtension/herf.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | title 6 | 7 | 8 | 9 |

10 | go to app 11 |

12 | 13 | 14 | -------------------------------------------------------------------------------- /Example/JKSwiftExtension/huaban1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JoanKing/JKSwiftExtension/60ed6ddc03b541fe251cb0bbc0cca1fea389a4ac/Example/JKSwiftExtension/huaban1.png -------------------------------------------------------------------------------- /Example/JKSwiftExtension/mebubble@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JoanKing/JKSwiftExtension/60ed6ddc03b541fe251cb0bbc0cca1fea389a4ac/Example/JKSwiftExtension/mebubble@2x.png -------------------------------------------------------------------------------- /Example/JKSwiftExtension/pika2.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JoanKing/JKSwiftExtension/60ed6ddc03b541fe251cb0bbc0cca1fea389a4ac/Example/JKSwiftExtension/pika2.gif -------------------------------------------------------------------------------- /Example/JKSwiftExtension/testFile.text: -------------------------------------------------------------------------------- 1 | 我是在项目中的文件 2 | 3 | -------------------------------------------------------------------------------- /Example/JKSwiftExtension/testicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JoanKing/JKSwiftExtension/60ed6ddc03b541fe251cb0bbc0cca1fea389a4ac/Example/JKSwiftExtension/testicon.png -------------------------------------------------------------------------------- /Example/JKSwiftExtension/yoububble@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JoanKing/JKSwiftExtension/60ed6ddc03b541fe251cb0bbc0cca1fea389a4ac/Example/JKSwiftExtension/yoububble@2x.png -------------------------------------------------------------------------------- /Example/JKSwiftExtension/zh-Hans.lproj/LaunchScreen.strings: -------------------------------------------------------------------------------- 1 | 2 | /* Class = "UILabel"; text = " Copyright (c) 2015 CocoaPods. All rights reserved."; ObjectID = "8ie-xW-0ye"; */ 3 | "8ie-xW-0ye.text" = " Copyright (c) 2015 CocoaPods. All rights reserved."; 4 | 5 | /* Class = "UILabel"; text = "JKSwiftExtension"; ObjectID = "kId-c2-rCX"; */ 6 | "kId-c2-rCX.text" = "JKSwiftExtension"; 7 | -------------------------------------------------------------------------------- /Example/JKSwiftExtension/zh-Hans.lproj/Localizable.strings: -------------------------------------------------------------------------------- 1 | /* 2 | Localizable.strings 3 | JKSwiftExtension 4 | 5 | Created by chongwang on 2024/4/26. 6 | Copyright © 2024 CocoaPods. All rights reserved. 7 | */ 8 | 9 | "Text_01" = "香蕉"; 10 | -------------------------------------------------------------------------------- /Example/JKSwiftExtension/zh-Hans.lproj/Main.strings: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /Example/Podfile: -------------------------------------------------------------------------------- 1 | platform :ios, '13.0' 2 | use_frameworks! 3 | target 'JKSwiftExtension_Example' do 4 | pod 'JKSwiftExtension', :path => '../' 5 | 6 | pod 'SnapKit' 7 | # 卡顿检测 8 | # pod 'GDPerformanceView-Swift', '~> 2.1.1', :configurations => ['Debug'] 9 | 10 | end 11 | -------------------------------------------------------------------------------- /Example/Podfile.lock: -------------------------------------------------------------------------------- 1 | PODS: 2 | - JKSwiftExtension (2.7.3) 3 | - SnapKit (5.7.1) 4 | 5 | DEPENDENCIES: 6 | - JKSwiftExtension (from `../`) 7 | - SnapKit 8 | 9 | SPEC REPOS: 10 | trunk: 11 | - SnapKit 12 | 13 | EXTERNAL SOURCES: 14 | JKSwiftExtension: 15 | :path: "../" 16 | 17 | SPEC CHECKSUMS: 18 | JKSwiftExtension: a9c05eb53807993fc4cc257ec79358c042a02a8c 19 | SnapKit: d612e99e678a2d3b95bf60b0705ed0a35c03484a 20 | 21 | PODFILE CHECKSUM: cc584c186fef3380df7edbb3c8fd21a180fb5eae 22 | 23 | COCOAPODS: 1.16.2 24 | -------------------------------------------------------------------------------- /Example/Pods/Local Podspecs/JKSwiftExtension.podspec.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "JKSwiftExtension", 3 | "version": "2.7.3", 4 | "summary": "Swift版本的一个扩展", 5 | "description": "这是Swift版本扩展的一个详细的使用,可以参考里面的用法", 6 | "homepage": "https://github.com/JoanKing/JKSwiftExtension", 7 | "license": { 8 | "type": "MIT", 9 | "file": "LICENSE" 10 | }, 11 | "authors": { 12 | "JoanKing": "jkironman@163.com" 13 | }, 14 | "social_media_url": "https://github.com/JoanKing", 15 | "source": { 16 | "git": "https://github.com/JoanKing/JKSwiftExtension.git", 17 | "tag": "2.7.3" 18 | }, 19 | "platforms": { 20 | "ios": "13.0" 21 | }, 22 | "swift_versions": "5.0", 23 | "requires_arc": true, 24 | "source_files": "Sources/Classes/**/*", 25 | "resource_bundles": { 26 | "JKSwiftExtension": [ 27 | "Sources/Assets/*.png" 28 | ] 29 | }, 30 | "swift_version": "5.0" 31 | } 32 | -------------------------------------------------------------------------------- /Example/Pods/Manifest.lock: -------------------------------------------------------------------------------- 1 | PODS: 2 | - JKSwiftExtension (2.7.3) 3 | - SnapKit (5.7.1) 4 | 5 | DEPENDENCIES: 6 | - JKSwiftExtension (from `../`) 7 | - SnapKit 8 | 9 | SPEC REPOS: 10 | trunk: 11 | - SnapKit 12 | 13 | EXTERNAL SOURCES: 14 | JKSwiftExtension: 15 | :path: "../" 16 | 17 | SPEC CHECKSUMS: 18 | JKSwiftExtension: a9c05eb53807993fc4cc257ec79358c042a02a8c 19 | SnapKit: d612e99e678a2d3b95bf60b0705ed0a35c03484a 20 | 21 | PODFILE CHECKSUM: cc584c186fef3380df7edbb3c8fd21a180fb5eae 22 | 23 | COCOAPODS: 1.16.2 24 | -------------------------------------------------------------------------------- /Example/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 | -------------------------------------------------------------------------------- /Example/Pods/SnapKit/Sources/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 canImport(UIKit) 25 | import UIKit 26 | #else 27 | import AppKit 28 | #endif 29 | 30 | 31 | #if canImport(UIKit) 32 | @available(iOS 11.0, tvOS 11.0, *) 33 | public typealias ConstraintDirectionalInsets = NSDirectionalEdgeInsets 34 | #endif 35 | -------------------------------------------------------------------------------- /Example/Pods/SnapKit/Sources/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 canImport(UIKit) 25 | import UIKit 26 | #else 27 | import AppKit 28 | #endif 29 | 30 | 31 | #if canImport(UIKit) 32 | public typealias ConstraintInsets = UIEdgeInsets 33 | #else 34 | public typealias ConstraintInsets = NSEdgeInsets 35 | #endif 36 | -------------------------------------------------------------------------------- /Example/Pods/SnapKit/Sources/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 canImport(UIKit) 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 | -------------------------------------------------------------------------------- /Example/Pods/SnapKit/Sources/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 canImport(UIKit) 25 | import UIKit 26 | #else 27 | import AppKit 28 | #endif 29 | 30 | 31 | #if canImport(UIKit) 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 | -------------------------------------------------------------------------------- /Example/Pods/SnapKit/Sources/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 canImport(UIKit) 25 | import UIKit 26 | #else 27 | import AppKit 28 | #endif 29 | 30 | 31 | #if canImport(UIKit) 32 | @available(iOS 8.0, *) 33 | public typealias ConstraintLayoutSupport = UILayoutSupport 34 | #else 35 | public class ConstraintLayoutSupport {} 36 | #endif 37 | -------------------------------------------------------------------------------- /Example/Pods/SnapKit/Sources/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 canImport(UIKit) 25 | import UIKit 26 | #else 27 | import AppKit 28 | #endif 29 | 30 | 31 | #if canImport(UIKit) 32 | public typealias ConstraintView = UIView 33 | #else 34 | public typealias ConstraintView = NSView 35 | #endif 36 | -------------------------------------------------------------------------------- /Example/Pods/SnapKit/Sources/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 canImport(UIKit) 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 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/JKSwiftExtension/JKSwiftExtension-Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | ${PODS_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 | FMWK 17 | CFBundleShortVersionString 18 | 2.7.3 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | ${CURRENT_PROJECT_VERSION} 23 | NSPrincipalClass 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/JKSwiftExtension/JKSwiftExtension-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_JKSwiftExtension : NSObject 3 | @end 4 | @implementation PodsDummy_JKSwiftExtension 5 | @end 6 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/JKSwiftExtension/JKSwiftExtension-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 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/JKSwiftExtension/JKSwiftExtension-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 JKSwiftExtensionVersionNumber; 15 | FOUNDATION_EXPORT const unsigned char JKSwiftExtensionVersionString[]; 16 | 17 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/JKSwiftExtension/JKSwiftExtension.debug.xcconfig: -------------------------------------------------------------------------------- 1 | CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO 2 | CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/JKSwiftExtension 3 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 4 | LIBRARY_SEARCH_PATHS = $(inherited) "${TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" /usr/lib/swift 5 | OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS 6 | PODS_BUILD_DIR = ${BUILD_DIR} 7 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 8 | PODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE} 9 | PODS_ROOT = ${SRCROOT} 10 | PODS_TARGET_SRCROOT = ${PODS_ROOT}/../.. 11 | PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates 12 | PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} 13 | SKIP_INSTALL = YES 14 | USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES 15 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/JKSwiftExtension/JKSwiftExtension.modulemap: -------------------------------------------------------------------------------- 1 | framework module JKSwiftExtension { 2 | umbrella header "JKSwiftExtension-umbrella.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/JKSwiftExtension/JKSwiftExtension.release.xcconfig: -------------------------------------------------------------------------------- 1 | CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO 2 | CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/JKSwiftExtension 3 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 4 | LIBRARY_SEARCH_PATHS = $(inherited) "${TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" /usr/lib/swift 5 | OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS 6 | PODS_BUILD_DIR = ${BUILD_DIR} 7 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 8 | PODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE} 9 | PODS_ROOT = ${SRCROOT} 10 | PODS_TARGET_SRCROOT = ${PODS_ROOT}/../.. 11 | PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates 12 | PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} 13 | SKIP_INSTALL = YES 14 | USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES 15 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/JKSwiftExtension/ResourceBundle-JKSwiftExtension-JKSwiftExtension-Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | ${PODS_DEVELOPMENT_LANGUAGE} 7 | CFBundleIdentifier 8 | ${PRODUCT_BUNDLE_IDENTIFIER} 9 | CFBundleInfoDictionaryVersion 10 | 6.0 11 | CFBundleName 12 | ${PRODUCT_NAME} 13 | CFBundlePackageType 14 | BNDL 15 | CFBundleShortVersionString 16 | 2.7.3 17 | CFBundleSignature 18 | ???? 19 | CFBundleVersion 20 | 1 21 | NSPrincipalClass 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-JKSwiftExtension_Example/Pods-JKSwiftExtension_Example-Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | ${PODS_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 | FMWK 17 | CFBundleShortVersionString 18 | 1.0.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | ${CURRENT_PROJECT_VERSION} 23 | NSPrincipalClass 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-JKSwiftExtension_Example/Pods-JKSwiftExtension_Example-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_Pods_JKSwiftExtension_Example : NSObject 3 | @end 4 | @implementation PodsDummy_Pods_JKSwiftExtension_Example 5 | @end 6 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-JKSwiftExtension_Example/Pods-JKSwiftExtension_Example-frameworks-Debug-input-files.xcfilelist: -------------------------------------------------------------------------------- 1 | ${PODS_ROOT}/Target Support Files/Pods-JKSwiftExtension_Example/Pods-JKSwiftExtension_Example-frameworks.sh 2 | ${BUILT_PRODUCTS_DIR}/JKSwiftExtension/JKSwiftExtension.framework 3 | ${BUILT_PRODUCTS_DIR}/SnapKit/SnapKit.framework -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-JKSwiftExtension_Example/Pods-JKSwiftExtension_Example-frameworks-Debug-output-files.xcfilelist: -------------------------------------------------------------------------------- 1 | ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/JKSwiftExtension.framework 2 | ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SnapKit.framework -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-JKSwiftExtension_Example/Pods-JKSwiftExtension_Example-frameworks-Release-input-files.xcfilelist: -------------------------------------------------------------------------------- 1 | ${PODS_ROOT}/Target Support Files/Pods-JKSwiftExtension_Example/Pods-JKSwiftExtension_Example-frameworks.sh 2 | ${BUILT_PRODUCTS_DIR}/JKSwiftExtension/JKSwiftExtension.framework 3 | ${BUILT_PRODUCTS_DIR}/SnapKit/SnapKit.framework -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-JKSwiftExtension_Example/Pods-JKSwiftExtension_Example-frameworks-Release-output-files.xcfilelist: -------------------------------------------------------------------------------- 1 | ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/JKSwiftExtension.framework 2 | ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SnapKit.framework -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-JKSwiftExtension_Example/Pods-JKSwiftExtension_Example-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_JKSwiftExtension_ExampleVersionNumber; 15 | FOUNDATION_EXPORT const unsigned char Pods_JKSwiftExtension_ExampleVersionString[]; 16 | 17 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-JKSwiftExtension_Example/Pods-JKSwiftExtension_Example.debug.xcconfig: -------------------------------------------------------------------------------- 1 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES 2 | CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO 3 | FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/JKSwiftExtension" "${PODS_CONFIGURATION_BUILD_DIR}/SnapKit" 4 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 5 | HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/JKSwiftExtension/JKSwiftExtension.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SnapKit/SnapKit.framework/Headers" 6 | LD_RUNPATH_SEARCH_PATHS = $(inherited) /usr/lib/swift '@executable_path/Frameworks' '@loader_path/Frameworks' 7 | LIBRARY_SEARCH_PATHS = $(inherited) "${TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" /usr/lib/swift $(SDKROOT)/usr/lib/swift 8 | OTHER_LDFLAGS = $(inherited) -l"swiftCoreGraphics" -framework "JKSwiftExtension" -framework "SnapKit" 9 | OTHER_MODULE_VERIFIER_FLAGS = $(inherited) "-F${PODS_CONFIGURATION_BUILD_DIR}/JKSwiftExtension" "-F${PODS_CONFIGURATION_BUILD_DIR}/SnapKit" 10 | OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS 11 | PODS_BUILD_DIR = ${BUILD_DIR} 12 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 13 | PODS_PODFILE_DIR_PATH = ${SRCROOT}/. 14 | PODS_ROOT = ${SRCROOT}/Pods 15 | PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates 16 | USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES 17 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-JKSwiftExtension_Example/Pods-JKSwiftExtension_Example.modulemap: -------------------------------------------------------------------------------- 1 | framework module Pods_JKSwiftExtension_Example { 2 | umbrella header "Pods-JKSwiftExtension_Example-umbrella.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-JKSwiftExtension_Example/Pods-JKSwiftExtension_Example.release.xcconfig: -------------------------------------------------------------------------------- 1 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES 2 | CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO 3 | FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/JKSwiftExtension" "${PODS_CONFIGURATION_BUILD_DIR}/SnapKit" 4 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 5 | HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/JKSwiftExtension/JKSwiftExtension.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SnapKit/SnapKit.framework/Headers" 6 | LD_RUNPATH_SEARCH_PATHS = $(inherited) /usr/lib/swift '@executable_path/Frameworks' '@loader_path/Frameworks' 7 | LIBRARY_SEARCH_PATHS = $(inherited) "${TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" /usr/lib/swift $(SDKROOT)/usr/lib/swift 8 | OTHER_LDFLAGS = $(inherited) -l"swiftCoreGraphics" -framework "JKSwiftExtension" -framework "SnapKit" 9 | OTHER_MODULE_VERIFIER_FLAGS = $(inherited) "-F${PODS_CONFIGURATION_BUILD_DIR}/JKSwiftExtension" "-F${PODS_CONFIGURATION_BUILD_DIR}/SnapKit" 10 | OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS 11 | PODS_BUILD_DIR = ${BUILD_DIR} 12 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 13 | PODS_PODFILE_DIR_PATH = ${SRCROOT}/. 14 | PODS_ROOT = ${SRCROOT}/Pods 15 | PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates 16 | USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES 17 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/SnapKit/SnapKit-Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | ${PODS_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 | FMWK 17 | CFBundleShortVersionString 18 | 5.7.1 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | ${CURRENT_PROJECT_VERSION} 23 | NSPrincipalClass 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/SnapKit/SnapKit-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_SnapKit : NSObject 3 | @end 4 | @implementation PodsDummy_SnapKit 5 | @end 6 | -------------------------------------------------------------------------------- /Example/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 | -------------------------------------------------------------------------------- /Example/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 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/SnapKit/SnapKit.debug.xcconfig: -------------------------------------------------------------------------------- 1 | CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO 2 | CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/SnapKit 3 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 4 | LIBRARY_SEARCH_PATHS = $(inherited) "${TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" /usr/lib/swift $(SDKROOT)/usr/lib/swift 5 | OTHER_LDFLAGS = $(inherited) -l"swiftCoreGraphics" 6 | OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS 7 | PODS_BUILD_DIR = ${BUILD_DIR} 8 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 9 | PODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE} 10 | PODS_ROOT = ${SRCROOT} 11 | PODS_TARGET_SRCROOT = ${PODS_ROOT}/SnapKit 12 | PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates 13 | PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} 14 | SKIP_INSTALL = YES 15 | USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES 16 | -------------------------------------------------------------------------------- /Example/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 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/SnapKit/SnapKit.release.xcconfig: -------------------------------------------------------------------------------- 1 | CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO 2 | CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/SnapKit 3 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 4 | LIBRARY_SEARCH_PATHS = $(inherited) "${TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" /usr/lib/swift $(SDKROOT)/usr/lib/swift 5 | OTHER_LDFLAGS = $(inherited) -l"swiftCoreGraphics" 6 | OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS 7 | PODS_BUILD_DIR = ${BUILD_DIR} 8 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 9 | PODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE} 10 | PODS_ROOT = ${SRCROOT} 11 | PODS_TARGET_SRCROOT = ${PODS_ROOT}/SnapKit 12 | PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates 13 | PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} 14 | SKIP_INSTALL = YES 15 | USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES 16 | -------------------------------------------------------------------------------- /Example/Tests/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 | BNDL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1 23 | 24 | 25 | -------------------------------------------------------------------------------- /Example/Tests/StringTest.swift: -------------------------------------------------------------------------------- 1 | // 2 | // StringTest.swift 3 | // JKSwiftExtension_Tests 4 | // 5 | // Created by IronMan on 2020/9/24. 6 | // Copyright © 2020 CocoaPods. All rights reserved. 7 | // 8 | 9 | import XCTest 10 | import JKSwiftExtension 11 | class StringTest: 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 | 23 | // test1() 24 | 25 | test2() 26 | } 27 | 28 | func test2() { 29 | let studentsName = "我是一只小小鸟A" 30 | // 判断是不是 nil 31 | XCTAssertTrue(studentsName.jk.containsIgnoringCase(find: "a"), "包含字符串") 32 | } 33 | 34 | func test1() { 35 | let studentsName = "我是一只小小鸟" 36 | // 判断是不是 nil 37 | XCTAssertNotNil(studentsName.range(of: "小"), "包含字符串") 38 | } 39 | 40 | func testPerformanceExample() throws { 41 | // This is an example of a performance test case. 42 | self.measure { 43 | // Put the code you want to measure the time of here. 44 | } 45 | } 46 | 47 | } 48 | -------------------------------------------------------------------------------- /Example/Tests/Tests.swift: -------------------------------------------------------------------------------- 1 | import XCTest 2 | import JKSwiftExtension 3 | 4 | class Tests: XCTestCase { 5 | 6 | override func setUp() { 7 | super.setUp() 8 | // Put setup code here. This method is called before the invocation of each test method in the class. 9 | } 10 | 11 | override func tearDown() { 12 | // Put teardown code here. This method is called after the invocation of each test method in the class. 13 | super.tearDown() 14 | } 15 | 16 | func testExample() { 17 | // This is an example of a functional test case. 18 | XCTAssert(true, "Pass") 19 | } 20 | 21 | func testPerformanceExample() { 22 | // This is an example of a performance test case. 23 | self.measure() { 24 | // Put the code you want to measure the time of here. 25 | } 26 | } 27 | 28 | } 29 | -------------------------------------------------------------------------------- /OtherEvent/通讯录和日历事件感兴趣的可以看看: -------------------------------------------------------------------------------- 1 | 通讯录和日历事件感兴趣的可以看看 -------------------------------------------------------------------------------- /Package.swift: -------------------------------------------------------------------------------- 1 | // swift-tools-version:5.5 2 | 3 | import PackageDescription 4 | 5 | let package = Package( 6 | name: "JKSwiftExtension", 7 | platforms: [.iOS(.v13)], 8 | products: [ 9 | .library( 10 | name: "JKSwiftExtension", 11 | targets: ["JKSwiftExtension"]), 12 | ], 13 | dependencies: [ 14 | // Dependencies declare other packages that this package depends on. 15 | // .package(url: /* package url */, from: "1.0.0"), 16 | ], 17 | targets: [ 18 | .target( 19 | name: "JKSwiftExtension", 20 | path: "Sources", 21 | resources: [.process("Assets/ironman.png")] 22 | ), 23 | .testTarget( 24 | name: "JKSwiftExtensionTests", 25 | dependencies: ["JKSwiftExtension"]), 26 | ] 27 | ) 28 | -------------------------------------------------------------------------------- /Sources/Assets/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JoanKing/JKSwiftExtension/60ed6ddc03b541fe251cb0bbc0cca1fea389a4ac/Sources/Assets/.gitkeep -------------------------------------------------------------------------------- /Sources/Assets/ironman.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JoanKing/JKSwiftExtension/60ed6ddc03b541fe251cb0bbc0cca1fea389a4ac/Sources/Assets/ironman.png -------------------------------------------------------------------------------- /Sources/Classes/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JoanKing/JKSwiftExtension/60ed6ddc03b541fe251cb0bbc0cca1fea389a4ac/Sources/Classes/.gitkeep -------------------------------------------------------------------------------- /Sources/Classes/FoundationExtension/Bool+Extension.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Bool+Extension.swift 3 | // JKSwiftExtension 4 | // 5 | // Created by IronMan on 2020/10/10. 6 | // 7 | 8 | import UIKit 9 | extension Bool: JKPOPCompatible {} 10 | // MARK: - 一、基本的扩展 11 | public extension JKPOP where Base == Bool { 12 | 13 | // MARK: 1.1、Bool 值转 Int 14 | /// Bool 值转 Int 15 | var boolToInt: Int { return self.base ? 1 : 0 } 16 | } 17 | -------------------------------------------------------------------------------- /Sources/Classes/FoundationExtension/CGPoint+Extension.swift: -------------------------------------------------------------------------------- 1 | // 2 | // CGPoint+Extension.swift 3 | // JKSwiftExtension 4 | // 5 | // Created by 小冲冲 on 2024/1/22. 6 | // 7 | // MARK: CGPoint扩展 8 | import UIKit 9 | 10 | // MARK: - 一、基本的扩展 11 | public extension CGPoint { 12 | // MARK: 1.1、两个CGPoint之间的差 13 | /// 两个CGPoint之间的差 14 | /// - Parameters: 15 | /// - lhs: 左边的点 16 | /// - rhs: 右边的点 17 | /// - Returns: 结果 18 | static func - (lhs: CGPoint, rhs: CGPoint) -> CGPoint { 19 | return CGPoint(x: lhs.x - rhs.x, y: lhs.y - rhs.y) 20 | } 21 | 22 | // MARK: 1.2、计算两个 CGPoint 的中点 23 | // MARK: 计算两个 CGPoint 的中点 24 | /// 计算两个 CGPoint 的中点 25 | /// - Parameter point: 另外一个点 26 | /// - Returns: 中间点 27 | func midPoint(by point: CGPoint) -> CGPoint { 28 | return CGPoint(x: (self.x + point.x) / 2, y: (self.y + point.y) / 2) 29 | } 30 | 31 | static func * (lhs: CGPoint, rhs: CGFloat) -> CGPoint { 32 | return CGPoint(x: lhs.x * rhs, y: lhs.y * rhs) 33 | } 34 | } 35 | 36 | -------------------------------------------------------------------------------- /Sources/Classes/FoundationExtension/CGRect+Extension.swift: -------------------------------------------------------------------------------- 1 | // 2 | // CGRect+Extension.swift 3 | // JKSwiftExtension 4 | // 5 | // Created by chongwang on 2024/11/5. 6 | // 7 | 8 | import Foundation 9 | 10 | // MARK: - 一、基本的扩展方法 11 | extension CGRect { 12 | 13 | static func * (lhs: CGRect, rhs: CGFloat) -> CGRect { 14 | return CGRect(origin: lhs.origin * rhs, size: lhs.size * rhs) 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /Sources/Classes/FoundationExtension/CGSize+Extension.swift: -------------------------------------------------------------------------------- 1 | // 2 | // CGSize+Extension.swift 3 | // JKSwiftExtension 4 | // 5 | // Created by chongwang on 2024/11/5. 6 | // 7 | import Foundation 8 | 9 | extension CGSize { 10 | 11 | static func * (lhs: CGSize, rhs: CGFloat) -> CGSize { 12 | return CGSize(width: lhs.width * rhs, height: lhs.height * rhs) 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /Sources/Classes/FoundationExtension/Character+Extension.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Character+Extension.swift 3 | // JKSwiftExtension 4 | // 5 | // Created by IronMan on 2020/10/10. 6 | // 7 | 8 | import UIKit 9 | extension Character: JKPOPCompatible {} 10 | // MARK: - 一、Character 与其他类型的转换 11 | public extension JKPOP where Base == Character { 12 | 13 | // MARK: 1.1、Character 转 String 14 | /// Character 转 String 15 | var charToString: String { return String(self.base) } 16 | 17 | // MARK: 1.2、Character 转 Int 18 | /// Character 转 Int 19 | var charToInt: Int? { 20 | return Int(String(self.base)) 21 | 22 | } 23 | } 24 | 25 | // MARK: - 二、常用的属性和方法 26 | public extension JKPOP where Base == Character { 27 | 28 | // MARK: 2.1、判断是不是 Emoji 表情 29 | /// 判断是不是 Emoj 表情 30 | var isEmoji: Bool { 31 | return String(self.base).jk.includesEmoji() 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /Sources/Classes/FoundationExtension/Data+extension.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Data+extension.swift 3 | // JKSwiftExtension 4 | // 5 | // Created by IronMan on 2020/11/28. 6 | // 7 | 8 | import UIKit 9 | extension Data: JKPOPCompatible {} 10 | // MARK: - 一、基本的扩展 11 | public extension JKPOP where Base == Data { 12 | 13 | // MARK: 1.1、base64编码成 Data 14 | /// 编码 15 | var encodeToData: Data? { 16 | return self.base.base64EncodedData() 17 | } 18 | 19 | // MARK: 1.2、base64解码成 Data 20 | /// 解码成 Data 21 | var decodeToDada: Data? { 22 | return Data(base64Encoded: self.base) 23 | } 24 | 25 | // MARK: 1.3、转成bytes 26 | /// 转成bytes 27 | var bytes: [UInt8] { 28 | return [UInt8](self.base) 29 | } 30 | 31 | // MARK: 1.4、Data转十六进制的字符串 32 | /// Data转16进制的字符串 33 | /// - Parameter data: data 34 | /// - Returns: 16进制的字符串 35 | var toHexString: String? { 36 | let data = self.base 37 | let dataBuffer = [UInt8](data) 38 | let dataLength = data.count 39 | var hexString = "" 40 | 41 | for i in 0.. String { 23 | guard isRemoveDecimalZero else { return "\(self.base.stringValue)" } 24 | // 检查小数部分是否为 0 25 | if self.base.decimalValue.isEqual(to: NSDecimalNumber.zero.decimalValue) { 26 | return "\(self.base.intValue)" 27 | } else { 28 | return "\(self.base.stringValue)" 29 | } 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /Sources/Classes/FoundationExtension/NSIndexPath+Extension.swift: -------------------------------------------------------------------------------- 1 | // 2 | // NSIndexPath+Extension.swift 3 | // JKSwiftExtension 4 | // 5 | // Created by IronMan on 2020/12/31. 6 | // 7 | 8 | import Foundation 9 | // MARK: - 一、基本的扩展 10 | public extension NSIndexPath { 11 | // MARK: 1.1、 {section, row} 12 | /// {section, row} 13 | var string: String { 14 | return String(format: "{%d, %d}", section, row) 15 | } 16 | 17 | // MARK: 1.2、当前 NSIndexPath 的前一个 NSIndexPath 18 | /// 当前 NSIndexPath 的前一个 NSIndexPath 19 | var previousRow: NSIndexPath { 20 | if row == 0 { 21 | return self 22 | } 23 | return NSIndexPath(row: self.row - 1, section: self.section) 24 | } 25 | 26 | // MARK: 1.3、当前 NSIndexPath 的后一个 NSIndexPath 27 | /// 当前 NSIndexPath 的后一个 NSIndexPath 28 | var nextRow: NSIndexPath { 29 | return NSIndexPath(row: self.row + 1, section: self.section) 30 | } 31 | } 32 | 33 | -------------------------------------------------------------------------------- /Sources/Classes/FoundationExtension/NSRange+Extension.swift: -------------------------------------------------------------------------------- 1 | // 2 | // NSRange+Extension.swift 3 | // JKSwiftExtension 4 | // 5 | // Created by IronMan on 2021/2/18. 6 | // 7 | 8 | import Foundation 9 | extension NSRange: JKPOPCompatible {} 10 | 11 | // MARK: - 一、基本的扩展 12 | public extension JKPOP where Base == NSRange { 13 | 14 | // MARK: 1.1、NSRange转换成Range的方法 15 | /// NSRange转换成Range的方法 16 | /// - Parameter string: 父字符串 17 | /// - Returns: Range 18 | func toRange(string: String) -> Range? { 19 | guard 20 | let from16 = string.utf16.index(string.utf16.startIndex, offsetBy: self.base.location, limitedBy: string.utf16.endIndex), 21 | let to16 = string.utf16.index(from16, offsetBy: self.base.length, limitedBy: string.utf16.endIndex), 22 | let from = String.Index(from16, within: string), 23 | let to = String.Index(to16, within: string) 24 | else { return nil } 25 | return from ..< to 26 | } 27 | } 28 | 29 | -------------------------------------------------------------------------------- /Sources/Classes/FoundationExtension/Range+Extension.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Range+Extension.swift 3 | // JKSwiftExtension 4 | // 5 | // Created by IronMan on 2021/3/25. 6 | // 7 | 8 | import Foundation 9 | 10 | // MARK: - 一、基本的扩展 11 | extension Range: JKPOPCompatible {} 12 | 13 | public extension JKPOP where Base: RangeExpression, Base.Bound == String.Index { 14 | 15 | // MARK: 1.1、Range 转 NSRange 16 | /// Range 转 NSRange 17 | /// - Parameter string: 父字符串 18 | /// - Returns: NSRange 19 | func toNSRange(in string: S) -> NSRange { 20 | return NSRange(self.base, in: string) 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /Sources/Classes/FoundationExtension/UInt+Extension.swift: -------------------------------------------------------------------------------- 1 | // 2 | // UInt+Extension.swift 3 | // JKSwiftExtension 4 | // 5 | // Created by IronMan on 2020/10/10. 6 | // 7 | 8 | import UIKit 9 | extension UInt: JKPOPCompatible {} 10 | // MARK: - 一、UInt 与其他类型的转换 11 | public extension JKPOP where Base == UInt { 12 | // MARK: 1.1、转 Int 13 | /// 转 Int 14 | var uintToInt: Int { return Int(self.base) } 15 | } 16 | -------------------------------------------------------------------------------- /Sources/Classes/FoundationExtension/URL+Extension.swift: -------------------------------------------------------------------------------- 1 | // 2 | // URL+Extension.swift 3 | // JKSwiftExtension 4 | // 5 | // Created by IronMan on 2020/10/10. 6 | // 7 | 8 | import UIKit 9 | extension URL: JKPOPCompatible {} 10 | // MARK: - 一、基本的扩展 11 | public extension JKPOP where Base == URL { 12 | 13 | // MARK: 1.1、提取链接中的参数以字典像是显示 14 | /// 提取链接中的参数以字典形式显示 15 | var queryParameters: [String: String]? { 16 | guard let components = URLComponents(url: self.base, resolvingAgainstBaseURL: true), let queryItems = components.queryItems else { 17 | return nil 18 | } 19 | var parameters = [String: String]() 20 | for item in queryItems { 21 | parameters[item.name] = item.value 22 | } 23 | return parameters 24 | } 25 | 26 | // MARK: 1.2、属性说明 27 | /// 属性说明 28 | func propertyDescription() { 29 | JKPrint("完整的url字符串 absoluteString:\(base.absoluteString)", "协议 scheme:\(base.scheme ?? "")", "域名 host:\(base.host ?? "")", "路径 path:\(base.path)", "相对路径 relativePath:\(base.relativePath)", "端口 port:\(base.port ?? 0)", "pathComponents:\(base.pathComponents)", "参数 query:\(base.query ?? "")") 30 | } 31 | 32 | // MARK: 1.3、检测应用是否能打开这个URL实例 33 | /// 1.3、检测应用是否能打开这个URL实例 34 | /// - Returns: 结果 35 | func verifyUrl() -> Bool { 36 | return UIApplication.shared.canOpenURL(self.base) 37 | } 38 | 39 | //MARK: 1.4、从url中获取后缀 例:mp3/mp4等等 40 | /// 从url中获取后缀 例:mp3/mp4等等 41 | var pathExtension: String { 42 | return self.base.pathExtension.isEmpty ? "" : "\(self.base.pathExtension)" 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /Sources/Classes/Protocol/JKJSON.swift: -------------------------------------------------------------------------------- 1 | // 2 | // JKJSON.swift 3 | // JKSwiftExtension 4 | // 5 | // Created by IronMan on 2021/2/22. 6 | // 7 | 8 | import Foundation 9 | 10 | // MARK: - 自定义一个JSON协议 11 | public protocol JKJSON: Codable { 12 | func toJSONString() -> String? 13 | } 14 | 15 | // MARK: - 扩展协议方法 16 | public extension JKJSON { 17 | // MARK: 将数据转成可用的JSON模型 18 | func toJSONString() -> String? { 19 | // encoded对象 20 | if let encodedData = try? JSONEncoder().encode(self) { 21 | // 从encoded对象获取String 22 | return String(data: encodedData, encoding: .utf8) 23 | } 24 | return nil 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /Sources/Classes/Protocol/JKNibLoadable.swift: -------------------------------------------------------------------------------- 1 | // 2 | // NibLoadable.swift 3 | // JKLive 4 | // 5 | // Created by 王冲 on 2020/7/23. 6 | // Copyright © 2020 王冲. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | import UIKit 11 | 12 | public protocol JKNibLoadable { 13 | } 14 | 15 | // MARK: - 一、继承于UIView的才可以使用该协议的扩展 16 | public extension JKNibLoadable where Self: UIView { 17 | 18 | // MARK: 1.1、加载xib视图 19 | /// 加载xib视图 20 | /// - Parameter nibName: xib名字 21 | /// - Returns: 返回视图 22 | static func loadFromNib(_ nibName: String? = nil) -> Self { 23 | let loadNme = nibName == nil ? "\(self)" : nibName! 24 | return Bundle.main.loadNibNamed(loadNme, owner: nil, options: nil)?.first as! Self 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /Sources/Classes/Protocol/JKPOP.swift: -------------------------------------------------------------------------------- 1 | // 2 | // JKPOP.swift 3 | // JKSwiftExtension 4 | // 5 | // Created by IronMan on 2020/9/24. 6 | // 7 | 8 | import UIKit 9 | import Foundation 10 | public struct JKPOP { 11 | let base: Base 12 | init(_ base: Base) { 13 | self.base = base 14 | } 15 | } 16 | 17 | public protocol JKPOPCompatible {} 18 | 19 | public extension JKPOPCompatible { 20 | 21 | static var jk: JKPOP.Type { 22 | get{ JKPOP.self } 23 | set {} 24 | } 25 | 26 | var jk: JKPOP { 27 | get { JKPOP(self) } 28 | set {} 29 | } 30 | } 31 | 32 | /// Define Property protocol 33 | internal protocol JKSwiftPropertyCompatible { 34 | 35 | /// Extended type 36 | associatedtype T 37 | 38 | ///Alias for callback function 39 | typealias SwiftCallBack = ((T?) -> ()) 40 | 41 | ///Define the calculated properties of the closure type 42 | var swiftCallBack: SwiftCallBack? { get set } 43 | } 44 | -------------------------------------------------------------------------------- /Sources/Classes/Protocol/JKPOPExtension/JKPOP+String.swift: -------------------------------------------------------------------------------- 1 | // 2 | // JKPOP+String.swift 3 | // nuannuan 4 | // 5 | // Created by 王冲 on 2019/11/23. 6 | // Copyright © 2019 王冲. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | extension String: JKPOPCompatible {} 12 | extension NSString: JKPOPCompatible {} 13 | 14 | extension JKPOP where Base: ExpressibleByStringLiteral { 15 | 16 | func numberCount() -> Int { 17 | guard let string = base as? String else { 18 | return 0 19 | } 20 | var count = 0 21 | for c in string where ("0"..."9").contains(c) { 22 | count += 1 23 | } 24 | return count 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /Sources/Classes/SmallTools/JKClosure.swift: -------------------------------------------------------------------------------- 1 | // 2 | // JKClosure.swift 3 | // JKSwiftExtension 4 | // 5 | // Created by IronMan on 2021/1/12. 6 | // 7 | 8 | import Foundation 9 | import UIKit 10 | 11 | /// View的闭包 12 | public typealias ViewClosure = ((UITapGestureRecognizer?, UIView, NSInteger) ->Void) 13 | /// 手势的闭包 14 | public typealias RecognizerClosure = ((UIGestureRecognizer) ->Void) 15 | /// UIControl闭包 16 | public typealias ControlClosure = ((UIControl) ->Void) 17 | -------------------------------------------------------------------------------- /Sources/Classes/SmallTools/JKDecodeString.swift: -------------------------------------------------------------------------------- 1 | // 2 | // JKDecodeString.swift 3 | // JKSwiftExtension 4 | // 5 | // Created by 小冲冲 on 2024/1/23. 6 | // 7 | // MARK: 不确定服务器的类型,使用String解析,目前支持其他类型是:Int,Double类型,不支持的使用返回nil 8 | import UIKit 9 | 10 | @propertyWrapper public struct JKDecodeString: Codable { 11 | public var wrappedValue: String? 12 | public init(from decoder: Decoder) throws { 13 | let container = try decoder.singleValueContainer() 14 | /// 返回的数据类型 15 | var string: String? 16 | do { 17 | string = try container.decode(String.self) 18 | } catch { 19 | do { 20 | string = String(try container.decode(Int.self)) 21 | } catch { 22 | do { 23 | string = String(try container.decode(Double.self)) 24 | } catch { 25 | string = nil 26 | } 27 | } 28 | } 29 | wrappedValue = string 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /Sources/Classes/SmallTools/JKOperator.swift: -------------------------------------------------------------------------------- 1 | // 2 | // JKOperator.swift 3 | // JKSwiftExtension 4 | // 5 | // Created by 小冲冲 on 2023/12/8. 6 | // 7 | 8 | import Foundation 9 | 10 | 11 | //MARK: 一、位移运算符 12 | /** 13 | Swift里面的运算符有三种: 14 | infix(中缀),如:+、-、*、/ 15 | prefix(前缀),如:逻辑运算!a 16 | postfix(后缀),如:自增运算符i++ 17 | */ 18 | infix operator |>>>| : BitwiseShiftPrecedence 19 | /** 20 | Int32(truncatingIfNeeded: lhs),truncatingIfNeeded是一种整数类型转换方式,用于将一个整数值转换为另一个整数类型,并在需要时截断高位或低位的位数。Int32(truncatingIfNeeded: lhs)中 Int32指的是32位,最大32个1的二进制,也就是4294967295,如果是33位,最前面就会被截取掉,保留32位;这里以Int8作为个例子,比如: Int8(truncatingIfNeeded: 300),Int8类型只能表示 -128 到 127 的范围内的值,而 300 超出了这个范围,因此会发生截断。300的二进制是:100101100,Int8只能表示8位,那么 100101100 从右边往左截取8位为:00101100 转化为10进制为44 21 | */ 22 | 23 | //MARK: 1.01、无符号右移运算符 24 | /// 无符号右移运算符 25 | /// - Parameters: 26 | /// - lhs: 值 27 | /// - rhs: 右移位数字 28 | /// - Returns: 右移动后的结果 29 | public func |>>>| (lhs: Int, rhs: Int) -> UInt32 { 30 | let truncating = Int32(truncatingIfNeeded: lhs) 31 | let value: UInt32 = UInt32(bitPattern: truncating) 32 | return value >> UInt32(rhs) 33 | } 34 | -------------------------------------------------------------------------------- /Sources/Classes/SmallTools/JKPaddingLabel.swift: -------------------------------------------------------------------------------- 1 | // 2 | // JKPaddingLabel.swift 3 | // JKSwiftExtension 4 | // 5 | // Created by IronMan on 2021/2/26. 6 | // 7 | 8 | import UIKit 9 | 10 | // MARK: - 具有内边距的Label 11 | public class JKPaddingLabel : UILabel { 12 | 13 | private var padding = UIEdgeInsets.zero 14 | 15 | public var paddingLeft: CGFloat { 16 | get { return padding.left } 17 | set { padding.left = newValue } 18 | } 19 | 20 | public var paddingRight: CGFloat { 21 | get { return padding.right } 22 | set { padding.right = newValue } 23 | } 24 | 25 | public var paddingTop: CGFloat { 26 | get { return padding.top } 27 | set { padding.top = newValue } 28 | } 29 | 30 | public var paddingBottom: CGFloat { 31 | get { return padding.bottom } 32 | set { padding.bottom = newValue } 33 | } 34 | 35 | public override func drawText(in rect: CGRect) { 36 | super.drawText(in: rect.inset(by: padding)) 37 | } 38 | 39 | public override func textRect(forBounds bounds: CGRect, limitedToNumberOfLines numberOfLines: Int) -> CGRect { 40 | let insets = self.padding 41 | var rect = super.textRect(forBounds: bounds.inset(by: insets), limitedToNumberOfLines: numberOfLines) 42 | rect.origin.x -= insets.left 43 | rect.origin.y -= insets.top 44 | rect.size.width += (insets.left + insets.right) 45 | rect.size.height += (insets.top + insets.bottom) 46 | return rect 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /Sources/Classes/SmallTools/JKPastedTextField.swift: -------------------------------------------------------------------------------- 1 | // 2 | // JKPastedTextField.swift 3 | // JKSwiftExtension 4 | // 5 | // Created by 小冲冲 on 2023/10/12. 6 | // 7 | 8 | import UIKit 9 | 10 | public class JKPastedTextField: UITextField { 11 | /// 是否正在复制 12 | public var isPasting = false 13 | 14 | public override func paste(_ sender: Any?) { 15 | super.paste(sender) 16 | isPasting = true 17 | } 18 | } 19 | 20 | -------------------------------------------------------------------------------- /Sources/Classes/SmallTools/JKPastedTextView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // JKPastedTextView.swift 3 | // JKSwiftExtension 4 | // 5 | // Created by 小冲冲 on 2023/10/13. 6 | // 7 | 8 | import UIKit 9 | 10 | public class JKPastedTextView: UITextView { 11 | 12 | /// 是否正在复制 13 | public var isPasting = false 14 | 15 | public override func paste(_ sender: Any?) { 16 | super.paste(sender) 17 | isPasting = true 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /Sources/Classes/SmallTools/JKTaskManager.swift: -------------------------------------------------------------------------------- 1 | // 2 | // JKTaskManager.swift 3 | // JKSwiftExtension 4 | // 5 | // Created by chongwang on 2025/2/5. 6 | // 任务管理器类,用于调度和取消延迟任务。 7 | import Foundation 8 | import Dispatch 9 | // MARK: - 任务管理器类,用于调度和取消延迟任务。 10 | /// 通过 `DispatchWorkItem` 实现任务的延迟执行,并支持任务取消。 11 | public class JKTaskManager { 12 | 13 | public init() { } 14 | 15 | // 存储任务标识符与对应的 DispatchWorkItem 16 | private var workItems: [String: DispatchWorkItem] = [:] 17 | 18 | /// 调度一个延迟任务。 19 | /// - Parameters: 20 | /// - identifier: 任务的唯一标识符。如果已存在相同标识符的任务,则取消旧任务。 21 | /// - delay: 任务的延迟时间(以秒为单位)。 22 | /// - task: 需要执行的任务闭包。 23 | public func scheduleTask(identifier: String, delay: TimeInterval, task: @escaping () -> Void) { 24 | // 取消已存在的相同标识符的任务 25 | cancelTask(identifier: identifier) 26 | 27 | // 创建一个 DispatchWorkItem,封装任务闭包 28 | let workItem = DispatchWorkItem { 29 | task() 30 | } 31 | 32 | // 将任务存储到字典中,以便后续取消 33 | workItems[identifier] = workItem 34 | 35 | // 在主队列中延迟执行任务 36 | DispatchQueue.main.asyncAfter(deadline: .now() + delay, execute: workItem) 37 | } 38 | 39 | /// 取消指定标识符的任务。 40 | /// - Parameter identifier: 需要取消的任务的唯一标识符。 41 | public func cancelTask(identifier: String) { 42 | // 检查是否存在对应标识符的任务 43 | if let workItem = workItems[identifier] { 44 | // 取消任务 45 | workItem.cancel() 46 | // 从字典中移除该任务 47 | workItems.removeValue(forKey: identifier) 48 | } 49 | } 50 | } 51 | -------------------------------------------------------------------------------- /Sources/Classes/UIKitExtension/UIBarButtonItem+Extension.swift: -------------------------------------------------------------------------------- 1 | // 2 | // UIBarButtonItem+Extension.swift 3 | // nuannuan 4 | // 5 | // Created by 王冲 on 2019/12/1. 6 | // Copyright © 2019 王冲. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | extension UIBarButtonItem: JKPOPCompatible {} 11 | // MARK: - 一、基本的扩展 12 | public extension JKPOP where Base: UIBarButtonItem { 13 | 14 | // MARK: 1.1、快捷创建 UIBarButtonItem 15 | static func createBarbuttonItem(name: String, target: Any?, action: Selector) -> UIBarButtonItem { 16 | let rightBtn = UIButton() 17 | rightBtn.setImage(UIImage(named: name), for: UIControl.State.normal) 18 | rightBtn.setImage(UIImage(named: name + "_highlighted"), for: UIControl.State.highlighted) 19 | // button自适应大小 20 | rightBtn.sizeToFit() 21 | rightBtn.addTarget(target, action: action, for: UIControl.Event.touchUpInside) 22 | return UIBarButtonItem(customView:rightBtn) 23 | } 24 | 25 | } 26 | -------------------------------------------------------------------------------- /Sources/Classes/UIKitExtension/UIImageView+Extension.swift: -------------------------------------------------------------------------------- 1 | // 2 | // UIImageView+Extension.swift 3 | // JKSwiftExtension 4 | // 5 | // Created by IronMan on 2020/11/16. 6 | // 7 | 8 | import UIKit 9 | // MARK: - 一、加载 gif 10 | public extension JKPOP where Base: UIImageView { 11 | 12 | // MARK: 1.1、加载本地的gif图片 13 | /// 加载本地的gif图片 14 | /// - Parameter name: 图片的名字 15 | func loadGif(name: String) { 16 | DispatchQueue.global().async { 17 | let image = UIImage.jk.gif(name: name) 18 | DispatchQueue.main.async { 19 | self.base.image = image 20 | } 21 | } 22 | } 23 | 24 | // MARK: 1.2、加载 asset 里面的图片 25 | /// 加载 asset 里面的图片 26 | /// - Parameter asset: asset 里面的图片名字 27 | @available(iOS 9.0, *) 28 | func loadGif(asset: String) { 29 | DispatchQueue.global().async { 30 | let image = UIImage.jk.gif(asset: asset) 31 | DispatchQueue.main.async { 32 | self.base.image = image 33 | } 34 | } 35 | } 36 | 37 | // MARK: 1.3、加载网络 url 的 gif 图片 38 | /// 加载网络 url 的 gif 图片 39 | /// - Parameter url: gif图片的网络地址 40 | @available(iOS 9.0, *) 41 | func loadGif(url: String) { 42 | DispatchQueue.global().async { 43 | let image = UIImage.jk.gif(url: url) 44 | DispatchQueue.main.async { 45 | self.base.image = image 46 | } 47 | } 48 | } 49 | } 50 | 51 | -------------------------------------------------------------------------------- /Sources/Classes/UIKitExtension/UIPageControl+Extension.swift: -------------------------------------------------------------------------------- 1 | // 2 | // UIPageControl+Extension.swift 3 | // JKSwiftExtension 4 | // 5 | // Created by IronMan on 2021/1/13. 6 | // 7 | 8 | import Foundation 9 | import UIKit 10 | 11 | public extension JKPOP where Base: UIPageControl { 12 | 13 | /// UIPageControl创建 14 | /// - Parameters: 15 | /// - rect: frame 16 | /// - numberOfPages: 页码数量 17 | /// - currentPage: 当前页码 18 | /// - currentPageIndicatorTintColor: 当前选中的颜色 19 | /// - pageIndicatorTintColor: 没有选中的颜色 20 | /// - Returns: UIPageControl 21 | static func create(_ rect: CGRect = .zero, numberOfPages: Int, currentPage: Int = 0, currentPageIndicatorTintColor: UIColor = .black, pageIndicatorTintColor: UIColor = .lightGray) -> UIPageControl { 22 | let view = UIPageControl(frame: rect) 23 | view.currentPageIndicatorTintColor = currentPageIndicatorTintColor 24 | view.pageIndicatorTintColor = pageIndicatorTintColor 25 | view.isUserInteractionEnabled = true 26 | view.hidesForSinglePage = true 27 | view.currentPage = 0 28 | view.numberOfPages = numberOfPages 29 | return view 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /Sources/Classes/UIKitExtension/UISlider+Extension.swift: -------------------------------------------------------------------------------- 1 | // 2 | // UISlider+Extension.swift 3 | // JKSwiftExtension 4 | // 5 | // Created by IronMan on 2021/1/5. 6 | // 7 | 8 | import UIKit 9 | 10 | //MARK:- 一、基本的扩展 11 | public extension JKPOP where Base: UISlider { 12 | 13 | // MARK: 1.1、UISlider的 闭包事件 14 | /// UISlider的 闭包事件 15 | /// - Parameters: 16 | /// - controlEvents: 事件类型,默认是 valueChanged 17 | /// - sliderCallBack: 闭包 18 | /// - Returns: 闭包内容 19 | func setHandle(controlEvents: UIControl.Event = .valueChanged, sliderCallBack: ((Float?) -> ())?) { 20 | base.swiftCallBack = sliderCallBack 21 | base.addTarget(base, action: #selector(base.sliderSwitchAction), for: controlEvents) 22 | } 23 | } 24 | 25 | private var sliderCallBackKey: Void? 26 | extension UISlider: JKSwiftPropertyCompatible { 27 | internal typealias T = Float 28 | internal var swiftCallBack: SwiftCallBack? { 29 | get { return jk_getAssociatedObject(self, &sliderCallBackKey) } 30 | set { jk_setRetainedAssociatedObject(self, &sliderCallBackKey, newValue) } 31 | } 32 | 33 | @objc internal func sliderSwitchAction(_ event: UISlider) { 34 | self.swiftCallBack?(event.value) 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /Sources/Classes/UIKitExtension/UISwitch+Extension.swift: -------------------------------------------------------------------------------- 1 | // 2 | // UISwitch+Extension.swift 3 | // JKSwiftExtension 4 | // 5 | // Created by IronMan on 2020/10/10. 6 | // 7 | 8 | import UIKit 9 | 10 | // MARK: - 一、基本的扩展 11 | public extension JKPOP where Base: UISwitch { 12 | 13 | // MARK: 1.1、开关切换 14 | /// 开关切换 15 | func toggle() { 16 | self.base.setOn(!self.base.isOn, animated: true) 17 | } 18 | 19 | // MARK: 1.2、开关事件 20 | /// 开关事件 21 | /// - Parameters: 22 | /// - controlEvents: 事件类型 23 | /// - switchCallBack: 事件闭包 24 | /// - Returns: 闭包函数 25 | func setHandle(controlEvents: UIControl.Event = .touchUpInside, switchCallBack: ((_ isOn: Bool?) -> ())?){ 26 | base.swiftCallBack = switchCallBack 27 | base.addTarget(base, action: #selector(base.swiftSwitchAction), for: controlEvents) 28 | } 29 | } 30 | 31 | private var switchCallBackKey: Void? 32 | extension UISwitch: JKSwiftPropertyCompatible { 33 | internal typealias T = Bool 34 | internal var swiftCallBack: SwiftCallBack? { 35 | get { return jk_getAssociatedObject(self, &switchCallBackKey) } 36 | set { jk_setRetainedAssociatedObject(self, &switchCallBackKey, newValue) } 37 | } 38 | 39 | @objc internal func swiftSwitchAction(_ event: UISwitch) { 40 | self.swiftCallBack?(event.isOn) 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /Sources/Classes/UIKitExtension/UITabBar+Extension.swift: -------------------------------------------------------------------------------- 1 | // 2 | // UITabBar+Extension.swift 3 | // JKSwiftExtension 4 | // 5 | // Created by IronMan on 2021/1/13. 6 | // 7 | 8 | import UIKit 9 | 10 | //MARK: - 一、基本的扩展 11 | public extension JKPOP where Base: UITabBar { 12 | // MARK: 1.1、设置透明背景 13 | /// 设置透明背景 14 | func setTransparentBackground() { 15 | self.base.backgroundImage = UIImage() 16 | self.base.shadowImage = UIImage() 17 | self.base.isTranslucent = true 18 | } 19 | } 20 | 21 | -------------------------------------------------------------------------------- /Sources/Classes/UIKitExtension/UITabBarController+Extension.swift: -------------------------------------------------------------------------------- 1 | // 2 | // UITabBarController+Extension.swift 3 | // JKSwiftExtension 4 | // 5 | // Created by IronMan on 2020/12/31. 6 | // 7 | 8 | import Foundation 9 | import UIKit 10 | 11 | // MARK: - 一、基本的扩展 12 | public extension JKPOP where Base: UITabBarController { 13 | // MARK: 1.1、当前选择索引 14 | /// 当前选择索引 15 | static var selectedIdx: Int { 16 | guard let keyWindow = UIApplication.jk.keyWindow, 17 | let rootController = keyWindow.rootViewController as? UITabBarController else { return 0} 18 | return rootController.selectedIndex 19 | } 20 | 21 | /// 用特定数据源刷新tabBar (暂时不可用) 22 | /// - Parameter list: 参照HomeViewController数据源 23 | fileprivate func reloadTabarItems(_ list: [[String]]) { 24 | for e in base.viewControllers!.enumerated(){ 25 | let itemList = list[e.offset] 26 | let title = itemList[itemList.count - 4] 27 | let img = UIImage(named: itemList[itemList.count - 3])?.withRenderingMode(.alwaysOriginal) 28 | let imgH = UIImage(named: itemList[itemList.count - 2])?.withRenderingMode(.alwaysTemplate) 29 | e.element.tabBarItem = UITabBarItem(title: title, image: img, selectedImage: imgH) 30 | } 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /Sources/Classes/UIKitExtension/UITableViewCell+Extension.swift: -------------------------------------------------------------------------------- 1 | // 2 | // UITableViewCell+Extension.swift 3 | // JKSwiftExtension 4 | // 5 | // Created by IronMan on 2020/12/17. 6 | // 7 | 8 | import UIKit 9 | 10 | // MARK: - 一、基本的扩展 11 | public extension JKPOP where Base: UITableViewCell { 12 | 13 | // MARK: 返回cell所在的UITableView 14 | /// 返回cell所在的UITableView 15 | /// - Returns: cell 所在的UITableView 16 | func superTableView() -> UITableView? { 17 | for view in sequence(first: self.base.superview, next: { $0?.superview }) { 18 | if let tableView = view as? UITableView { 19 | return tableView 20 | } 21 | } 22 | return nil 23 | } 24 | 25 | // MARK: 标识符 26 | var identifier: String { 27 | get { 28 | let classStr = NSStringFromClass(Base.self) 29 | // 获取类名 30 | return classStr.components(separatedBy: ".").last! 31 | } 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /Sources/Classes/UIKitExtension/UIVisualEffectView+Extension.swift: -------------------------------------------------------------------------------- 1 | // 2 | // UIVisualEffectView+Extension.swift 3 | // JKSwiftExtension 4 | // 5 | // Created by 王冲 on 2022/3/26. 6 | // 7 | 8 | import Foundation 9 | import UIKit 10 | 11 | // MARK: - 一、基本的扩展 12 | public extension JKPOP where Base: UIVisualEffectView { 13 | 14 | // MARK: 1.1、创建一个UIVisualEffectView对象 15 | /// 创建一个UIVisualEffectView对象 16 | /// - Parameters: 17 | /// - size: UIVisualEffectView的size 18 | /// - alpha: 模糊透明度 19 | /// - style: 模糊样式 20 | /// - isAddVibrancy: 是否添加UIVibrancyEffect 21 | /// - Returns: 返回UIVisualEffectView 22 | static func visualEffectView(size: CGSize, alpha: CGFloat = 1.0, style: UIBlurEffect.Style = .light, isAddVibrancy: Bool = true) -> UIVisualEffectView { 23 | // 首先创建一个模糊效果 24 | let blurEffect = UIBlurEffect(style: style) 25 | // 接着创建一个承载模糊效果的视图 26 | let blurView = UIVisualEffectView(effect: blurEffect) 27 | // 毛玻璃的透明度 28 | blurView.alpha = alpha 29 | // 设置模糊视图的大小(全屏) 30 | blurView.frame.size = size 31 | // 创建并添加vibrancy视图 32 | if isAddVibrancy { 33 | /* 34 | UIVibrancyEffect 主要用于放大和调整UIVisualEffectView 视图下面的内容的颜色,同时让UIVisualEffectView的 contentView中的内容看起来更加生动。通常UIVibrancyEffect 对象是与UIBlurEffect一起使用 35 | */ 36 | let vibrancyView = UIVisualEffectView(effect: UIVibrancyEffect(blurEffect: blurEffect)) 37 | vibrancyView.frame.size = size 38 | blurView.contentView.addSubview(vibrancyView) 39 | } 40 | return blurView 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /_Pods.xcodeproj: -------------------------------------------------------------------------------- 1 | Example/Pods/Pods.xcodeproj --------------------------------------------------------------------------------