周口市规划建设局网站,asp.net 网站开发 教程,如何做好集团网站建设,网站开发属于软件吗以下是2018年10月23日更新 经过大约一个月的时间的适配#xff0c;项目正式使用XCode10(以下简称为10 or XC10)大部分库都升级为Swift4.2#xff08;以下简称为 4.2 or S4.2#xff09;#xff0c;下面是适配过程中遇到的一些坑。 1. Swift4、Swift4.2混编 如果你对项目是小…以下是2018年10月23日更新 经过大约一个月的时间的适配项目正式使用XCode10(以下简称为10 or XC10)大部分库都升级为Swift4.2以下简称为 4.2 or S4.2下面是适配过程中遇到的一些坑。 1. Swift4、Swift4.2混编 如果你对项目是小的独立项目完全可以全部升级为4.2你可以略过第一条如果你依赖了一些第三方的库且没有升级4.2你可以继续看这一条。目前测试的结果来看Swift4 和 S4.2的混编没有什么大的问题如果你是通过cocoapod引入的可以在Podfile中加入如下代码 swift_41_pod_targets [your_target_name]
post_install do |installer|installer.pods_project.targets.each do |target|if swift_41_pod_targets.include?(target.name)target.build_configurations.each do |config|config.build_settings[SWIFT_VERSION] 4.1endendend
end
复制代码2. NSDataAsset 升级XC10和S.2之前项目里面有些对 NSDataAsset 的错误使用 用‘NSDataAsset’读ImageAsset中的图片这个是不正确的但是却可以工作这次升级修复了这个BUG。 正确的做法使用DataAsset然后才可以用‘NSDataAsset’读取数据我由于不够认真且经验不足还以为是个BUG给Apple提了个BUG。。。[捂脸] 3. 第三方库的重命名 typealias 为了方便的适配S4.2对UIKit中的重命名有些第三方使用typealias对一些类型进行了重命名以 RxSwift 为例子RxSwift中就有如下代码 #if swift(4.2)public typealias UIControlEvents UIControl.Event private
#endif
复制代码这会导致一些重命名的类型即使不改也不会报错但是一旦去掉了对某个库的依赖就会引入新的问题。 4.Delegate 的 Access Modifier 在升级S4.2过程中XC偶尔会提示需要给某些Delegate方法添加 private修饰符不要为了消除这个⚠️添加private可能会导致Delegate永远不被调到另外如果是一个public或者open的class协议方法记得也要加上public否则会出一样的问题具体原因我还在测试但是现象是这样的有新的见解欢迎评论区讨论。 5. 机型适配问题iPhone XS Max字体变大 有些同事遇到XC9构建的安装包在iPhone XS Max上会有字体变大的情况这个貌似是普遍现象微信也有使用XC10构建安装包可以解决这个问题但是会遇到问题6 ###6. iOS9.3以下系统Crash率飙升 使用XC10构建安装包可以解决问题5但是iOS9.3以下的系统Crash到让你怀疑人生 以下是2018年9月18日内容 AVAudioSession.sharedInstance().setCategory() disappeared Swift 4.2 中 iOS10以下不能用 AVAudioSession.sharedInstance() setCategory 可选方案: 使用OC实现该部分然后使用Swift调用放弃 iOS9用户体验参考地址 do {if #available(iOS 11.0, *) {try audioSession.setCategory(.playback, mode: .default, policy: .longForm, options: [])} else if #available(iOS 10.0, *) {try audioSession.setCategory(.playback, mode: .default, options: [])} else {// Compiler error: setCategory is unavailable in Swifttry audioSession.setCategory(AVAudioSession.Category.playback)}
} catch let error {print(Unable to configure audio sesson category: \(error))
}
复制代码 NSUnderlineStyle(.patternSolid、.none) disappeared 可选方案: .none mutableAttributedString.addAttribute(NSAttributedString.Key.underlineStyle, value: NSUnderlineStyle.none.rawValue, range: range) ^~~~~ none is unavailable: use [] to construct an empty option set Wrong: mutableAttributedString.addAttribute(NSAttributedString.Key.underlineStyle, value: [], range: range) Right: mutableAttributedString.addAttribute(NSAttributedString.Key.underlineStyle, value: 0, range: range) 使用 CTUnderlineStyleModifiers // 没有测试 NSUnderlineStyle.init(rawValue: Int(CTUnderlineStyleModifiers.patternSolid.rawValue)) 使用其他默认值 下面是Rename操作 UIKit #Swift4/UIKit UITableViewCell Swift 4Swift 4.2UITableViewCellStyleUITableViewCell.CellStyleUIEvent Swift 4Swift 4.2UIEventSubtypeUIEvent.EventSubtypeUITableView Swift 4Swift 4.2UITableViewScrollPositionUITableView.ScrollPositionUITableViewAutomaticDimensionUITableView.automaticDimensionUITableViewCellEditingStyleUITableViewCell.EditingStyleUITableViewRowAnimationUITableView.RowAnimationUITableViewStyleUITableView.StyleUITableViewCellAccessoryTypeUITableViewCell.AccessoryTypeUIControl Swift 4Swift 4.2UIControlEventsUIControl.EventUIWindow Swift 4Swift 4.2UIWindowLevelAlertUIWindow.Level.alertUIKeyboardFrameEndUserInfoKeyUIResponder.keyboardFrameEndUserInfoKeyUIKeyboardFrameBeginUserInfoKeyUIResponder.keyboardFrameBeginUserInfoKeyUIKeyboardAnimationDurationUserInfoKeyUIResponder.keyboardAnimationDurationUserInfoKeyUIKeyboardAnimationCurveUserInfoKeyUIResponder.keyboardAnimationCurveUserInfoKeyUIKeyboardIsLocalUserInfoKeyUIResponder.keyboardIsLocalUserInfoKeyUIWindowDidBecomeVisibleUIWindow.didBecomeVisibleNotificationUIWindowDidBecomeHiddenUIWindow.didBecomeHiddenNotificationUIWindowDidBecomeKeyUIWindow.didBecomeKeyNotificationUIWindowDidResignKeyUIWindow.didResignKeyNotificationUIKeyboardWillShowUIResponder.keyboardWillShowNotificationUIKeyboardDidShowUIResponder.keyboardDidShowNotificationUIKeyboardWillHideUIResponder.keyboardWillHideNotificationUIKeyboardDidHideUIResponder.keyboardDidHideNotificationUIViewController Swift 4Swift 4.2open func addChildViewController(_ childController: UIViewController)open func addChild(_ childController: UIViewController)open func willMove(toParentViewController parent: UIViewController?)open func willMove(toParent parent: UIViewController?)open func didMove(toParentViewController parent: UIViewController?)open func didMove(toParent parent: UIViewController?)open func removeFromParentViewController()open func removeFromParent()UIActivity Swift 4Swift 4.2UIActivityTypeUIActivity.ActivityTypeUIActivityIndicatorView Swift 4Swift 4.2activityIndicator.activityIndicatorViewStyleactivityIndicator.styleUIAlertController Swift 4Swift 4.2UIAlertActionStyleUIAlertAction.StyleUIAlertControllerStyleUIAlertController.StyleUIPageViewController Swift 4Swift 4.2UIPageViewControllerNavigationDirectionUIPageViewController.NavigationDirectionUIPageViewControllerSpineLocationUIPageViewController.SpineLocationUIPageViewControllerNavigationOrientationUIPageViewController.NavigationOrientationUIPageViewControllerTransitionStyleUIPageViewController.TransitionStyleUIPageViewControllerOptionsKeyUIPageViewController.OptionsKeyUINavigationController Swift 4Swift 4.2UINavigationControllerOperationUINavigationController.OperationUIGestureRecognizer Swift 4Swift 4.2UIGestureRecognizerStatePossibleUIGestureRecognizer.State.possibleUIGestureRecognizerStateBeganUIGestureRecognizer.State.beganUIGestureRecognizerStateChangedUIGestureRecognizer.State.changedUIGestureRecognizerStateEndedUIGestureRecognizer.State.endedUIGestureRecognizerStateCancelledUIGestureRecognizer.State.cancelledUIGestureRecognizerStateFailedUIGestureRecognizer.State.failedUIGestureRecognizerStateRecognizedUIGestureRecognizer.State.recognizedNSLayoutFormat Swift 4Swift 4.2NSLayoutFormatOptionsNSLayoutConstraint.FormatOptionsUIEdgeInsets Swift 4Swift 4.2public func UIEdgeInsetsMake(_ top: CGFloat, _ left: CGFloat, _ bottom: CGFloat, _ right: CGFloat) - UIEdgeInsetsUIEdgeInsets(top: CGFloat, left: CGFloat, bottom: CGFloat, right: CGFloat)public func UIEdgeInsetsInsetRect(_ rect: CGRect, _ insets: UIEdgeInsets) - CGRectpublic func inset(by insets: UIEdgeInsets) - CGRectUIFontDescriptor Swift 4Swift 4.2UIFontDescriptorSymbolicTraitsUIFontDescriptor.SymbolicTraitsUIImage Swift 4Swift 4.2UIKIT_EXTERN NSData * __nullable UIImagePNGRepresentation(UIImage * __nonnull image);public func pngData() - Data?NSData * __nullable UIImageJPEGRepresentation(UIImage * __nonnull image, CGFloat compressionQuality);public func jpegData(compressionQuality: CGFloat) - Data?UIApplication Swift 4Swift 4.2UIApplicationDidEnterBackgroundUIApplication.didEnterBackgroundNotificationUIApplicationWillEnterForegroundUIApplication.willEnterForegroundNotificationUIApplicationDidFinishLaunchingUIApplication.didFinishLaunchingNotificationUIApplicationDidBecomeActiveUIApplication.didBecomeActiveNotificationUIApplicationWillResignActiveUIApplication.willResignActiveNotificationUIApplicationDidReceiveMemoryWarningUIApplication.didReceiveMemoryWarningNotificationUIApplicationWillTerminateUIApplication.willTerminateNotificationUIApplicationSignificantTimeChangeUIApplication.significantTimeChangeNotificationUIApplicationWillChangeStatusBarOrientationUIApplication.willChangeStatusBarOrientationNotificationUIApplicationDidChangeStatusBarOrientationUIApplication.didChangeStatusBarOrientationNotificationUIApplicationDidChangeStatusBarFrameUIApplication.didChangeStatusBarFrameNotificationUIApplicationBackgroundRefreshStatusDidChangeUIApplication.backgroundRefreshStatusDidChangeNotificationUIApplicationProtectedDataWillBecomeUnavailableUIApplication.protectedDataWillBecomeUnavailableNotificationUIApplicationProtectedDataDidBecomeAvailableUIApplication.protectedDataDidBecomeAvailableNotificationUIApplicationUserDidTakeScreenshotUIApplication.userDidTakeScreenshotNotificationUIApplicationOpenSettingsURLStringUIApplication.openSettingsURLStringUIApplicationLaunchOptionsKeyUIApplication.LaunchOptionsKeyUIInterfaceOrientationIsLandscape()UIApplication.shared.statusBarOrientation.isLandscapeUIView Swift 4Swift 4.2func bringSubview(toFront view: UIView)func bringSubviewToFront(_ view: UIView)UIViewAnimationOptionsUIView.AnimationOptions()Foundation NSAttributedString Swift 4Swift 4.2NSAttributedStringKeyNSAttributedString.KeyQuartzCore CAShapeLayer Swift 4Swift 4.2kCALineCapRoundCAShapeLayerLineCap.roundkCALineCapButtCAShapeLayerLineCap.buttkCALineCapSquareCAShapeLayerLineCap.squarekCALineJoinMiterCAShapeLayerLineJoin.miterkCALineJoinRoundCAShapeLayerLineJoin.roundkCALineJoinBevelCAShapeLayerLineJoin.bevelkCAFillRuleNonZeroCAShapeLayerFillRule.nonZerokCAFillRuleEvenOddCAShapeLayerFillRule.evenOdd参考资料 Swift-Migration-4.2 转载于:https://juejin.im/post/5ba0dfb9e51d450e4a1babcb