文档【免费下载链接】swift-evolutionThis maintains proposals for changes and user-visible enhancements to the Swift Programming Language.项目地址https://gitcode.com/gh_mirrors/sw/swift-evolution点击查看免费下载本文以 swift-evolution 仓库中的 SE-0086 提案 为主体结合 SE-0069Foundation 值类型改造、SE-0006标准库 API 规范、SE-0005Objective-C API 自动翻译 等关联提案与 Swift 3.0 发布说明系统梳理去掉 Foundation 中 NS 前缀这一影响面覆盖所有 Swift 工程的历史性重构你将从本文掌握其背景动机、五条判定规则、87 项类型更名清单、107 项枚举/选项集提升为子类型的映射表以及NSStringEncoding向String.Encoding的完整转换方式。一、为什么 Swift 3 要大动干戈地移除 NS 前缀1.1 核心库Swift Core Libraries要成为原生库提案开篇阐述了核心动机一门语言的开发体验很大程度上取决于随编译器一起分发的库。在 Swift 体系中最底层的是刻意保持小巧专注的Swift 标准库Swift Standard Library而在标准库之上为了提供更高层次的功能Swift 建立了Swift Core Libraries它们被要求随 Swift 支持的所有平台一起发布单元测试swift-corelibs-xctest调度、多线程与锁原语swift-corelibs-dispatch国际化、本地化、附加模型类型与可移植性swift-corelibs-foundationSwift 团队认为要让这些库成为基础且原生的 Swift 库最好的办法就是让它们的命名风格与标准库保持一致——而当时的 Foundation 大量类型还顶着 Objective-C 时代的NS前缀NSURL、NSData、NSJSONSerialization……在 Swift 代码里显得像一个外来入侵者foreign invader与本地方言格格不入。1.2 三步走的命名规范落地路线SE-0086 是整个Swift 3 API 命名规范路线图的第三步第一步确立命名规范SE-0023: API Design GuidelinesAPI 设计规范本身第二步按规范改造标准库、调整 Cocoa SDK 导入SE-0006: Apply API Guidelines to the Standard Library标准库全面改写例如sort()→sorted()、enumerate()→enumerated()、协议去掉Type后缀SE-0005: Better Translation of Objective-C APIs Into SwiftClang Importer 自动翻译规则例如stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceAndNewlineCharacterSet())这类冗长调用被映射为更 Swift 的写法第三步本文主角调整 Swift Core Libraries 的 API聚焦swift-corelibs-foundation即从类型名层面移除NS前缀。注意所有变更只针对Swift侧Objective-C 侧完全不变NSURL在 Objective-C 里依然是NSURL。1.3 与 SE-0069 值类型改造的协同SE-0086 明确表示本次更名与 SE-0069: Mutability and Foundation Value TypesSwift Foundation 的可变性/值类型改造是配套关系。SE-0069 引入了Date、Data、URL、URLComponents、UUID、Notification、CharacterSet、IndexSet、IndexPath、PersonNameComponents、AffineTransform、DateComponents、URLQueryItem等一批以 struct 形式存在的值类型采用 copy-on-write写时复制实现并定义了ReferenceConvertible协议作为桥接契约。SE-0086 的规则三有值类型等价物的类保留 NS 前缀正是以 SE-0069 的清单为依据。两者结合后Foundation 的 API 从命名到语义都像 Swift 语言本身的一部分。二、核心判定规则哪些类型去掉 NS哪些保留提案给出了一套可复用的判定规则用于处理当前类型也用于指导未来新增类型的命名。规则的编号沿用原文0 起编号。2.1 适用于所有类型的三条主要规则规则判定依据保留 NS 的示例0该类型专为 Objective-C 设计或与 Objective-C 运行时及NS命名空间本质绑定NSObject、NSAutoreleasePool、NSException、NSProxy1该类型是平台特定的许多这类类型位于 Foundation 中但实际属于 AppKit/UIKit 等更高层框架的命名空间这些高层框架保留自身前缀故须匹配NSUserNotification、NSBackgroundActivity、NSXPCConnection2该类型已有值类型等价物依据 SE-0069NSArray、NSString、NSPersonNameComponents2.2 仅适用于存量类的四条附加规则考虑到当时正处于 Swift 3 这个最后一次大规模源码破坏性变更的特殊过渡期提案额外追加了四条只针对既有类的规则规则判定依据示例3计划在不久的将来拥有值类型等价物NSAttributedString、NSRegularExpression、NSPredicate4NSLock家族含协议将在下一版本随 Swift 整体并发concurrency工作重新审视NSLock、NSLocking等5额外集合类型通常只对对象而非Any泛型化修复过程很可能让它们变为 struct 自身这也与特定于 Objective-C规则相关Objective-C 集合只能容纳对象NSCache、NSMapTable、NSHashTable、NSOrderedSet6少数类型去掉前缀的同时还会改名以更贴切地描述其角色NSTask→Process提案特别强调是否去掉NS的决定主要围绕类型本身包括其名称以及它是struct还是class。部分类型的方法和属性仍可针对 Swift 做逐项改进即便类型名已去掉NS这些改进也会在个案基础上持续推进。三、详细设计87 项去掉 NS 前缀的类型完整清单以下表格完整列出 SE-0086 中所有去掉NS前缀的类型与符号Objective-C 名 → Swift 名。这是本次改名的核心交付物Objective-C 名称Swift 名称备注NSBlockOperationBlockOperationNSBundleBundleNSByteCountFormatterByteCountFormatterNSCachedURLResponseCachedURLResponseNSComparisonResultComparisonResultNSDateComponentsFormatterDateComponentsFormatterNSDateFormatterDateFormatterNSDateIntervalFormatterDateIntervalFormatterNSDistributedNotificationCenterDistributedNotificationCenterNSEnergyFormatterEnergyFormatterNSFileHandleFileHandleNSFileManagerFileManagerNSFileManagerDelegateFileManagerDelegateNSFileWrapperFileWrapperNSFormatterFormatterNSHostHostNSHTTPCookieHTTPCookieNSHTTPCookieStorageHTTPCookieStorageNSHTTPURLResponseHTTPURLResponseNSInputStreamInputStreamNSJSONSerializationJSONSerializationNSLengthFormatterLengthFormatterNSMassFormatterMassFormatterNSMessagePortMessagePortNSNetServiceNetServiceNSNetServiceBrowserNetServiceBrowserNSNetServiceBrowserDelegateNetServiceBrowserDelegateNSNetServiceDelegateNetServiceDelegateNSNotificationCenterNotificationCenterNSNotificationNameNotificationNameNSNotificationQueueNotificationQueueNSNumberFormatterNumberFormatterNSOperatingSystemVersionOperatingSystemVersionNSOperationOperationNSOperationQueueOperationQueueNSOutputStreamOutputStreamSwift 标准库中原有的OutputStream将更名为TextOutputStreamNSPersonNameComponentsFormatterPersonNameComponentsFormatterNSPipePipeNSPortPortNSPortDelegatePortDelegateNSPortMessagePortMessageNSProcessInfoProcessInfoNSProgressProgressNSProgressReportingProgressReportingNSPropertyListSerializationPropertyListSerializationNSQualityOfServiceQualityOfServiceNSRunLoopRunLoopNSScannerScannerNSSocketPortSocketPortNSStreamStreamNSStreamDelegateStreamDelegateNSTaskProcess标准库中存在Process类型ProcessInfo将吸收该枚举获取命令行参数的函数原枚举被移除未来很可能把基础ProcessInfo下沉到标准库NSThreadThreadNSTimeIntervalTimeIntervalNSTimerTimerNSUndoManagerUndoManagerNSURLAuthenticationChallengeURLAuthenticationChallengeNSURLAuthenticationChallengeSenderURLAuthenticationChallengeSenderNSURLCacheURLCacheNSURLCredentialURLCredentialNSURLCredentialStorageURLCredentialStorageNSURLProtectionSpaceURLProtectionSpaceNSURLProtocolURLProtocolNSURLProtocolClientURLProtocolClientNSURLRequestURLRequestNSURLResponseURLResponseNSURLSessionURLSessionNSURLSessionConfigurationURLSessionConfigurationNSURLSessionDataDelegateURLSessionDataDelegateNSURLSessionDataTaskURLSessionDataTaskNSURLSessionDelegateURLSessionDelegateNSURLSessionDownloadDelegateURLSessionDownloadDelegateNSURLSessionDownloadTaskURLSessionDownloadTaskNSURLSessionStreamDelegateURLSessionStreamDelegateNSURLSessionStreamTaskURLSessionStreamTaskNSURLSessionTaskURLSessionTaskNSURLSessionTaskDelegateURLSessionTaskDelegateNSURLSessionUploadTaskURLSessionUploadTaskNSUserDefaultsUserDefaultsNSXMLDocumentXMLDocumentNSXMLDTDXMLDTDNSXMLDTDNodeXMLDTDNodeNSXMLElementXMLElementNSXMLNodeXMLNodeNSXMLParserXMLParserNSXMLParserDelegateXMLParserDelegate实战要点NSOutputStream→OutputStream是一次抢占命名Swift 标准库原有的OutputStream协议被改名为TextOutputStream把名字让给了 Foundation 的流类型。NSTask→Process是最典型的改名更名案例。旧代码中通过NSTask枚举访问Process.arguments的用法统一收敛到ProcessInfo.processInfo.arguments未来该能力还可能下沉进标准库。从仓库内后续提案可以看出这些新名字已成为后续 API 讨论的通用词汇例如 SE-0139、SE-0166、SE-0167JSON 编码器JSONSerialization的后续演进、SE-0300 与 SE-0314异步流与URLSession相关等提案中URLSession、JSONSerialization、NotificationCenter、FileManager、DateFormatter、UserDefaults等新命名已成为通行标准——这是 SE-0086 改名落地并长期生效的间接证据。四、详细设计107 项提升为子类型的类型完整清单除了直接去前缀SE-0086 还把一大批顶层类型提升为对应类的嵌套子类型Hoisted types让命名空间更紧凑、自文档化。NSActivityOptions变为ProcessInfo.ActivityOptions这类映射即属此类。以下为完整映射表旧名称新名称备注NSActivityOptionsProcessInfo.ActivityOptionsNSAppleEventSendOptionsNSAppleEventDescriptor.SendOptionsNSAttributedStringEnumerationOptionsAttributedString.EnumerationOptionsNSBackgroundActivityResultNSBackgroundActivityScheduler.ResultNSByteCountFormatterCountStyleByteCountFormatter.CountStyleNSByteCountFormatterUnitsByteCountFormatter.UnitsNSCalculationErrorDecimal.CalculationErrorNSCalendarOptionsCalendar.OptionsNSCalendarUnitCalendar.UnitNSComparisonPredicateModifierComparisonPredicate.ModifierNSComparisonPredicateOptionsComparisonPredicate.OptionsNSCompoundPredicateTypeCompoundPredicate.LogicalTypeNSDataBase64DecodingOptionsNSData.Base64DecodingOptionsData将提供typealiasNSDataBase64EncodingOptionsNSData.Base64EncodingOptionsData将提供typealiasNSDataReadingOptionsNSData.ReadingOptionsData将提供typealiasNSDataSearchOptionsNSData.SearchOptionsData将提供typealiasNSDataWritingOptionsNSData.WritingOptionsData将提供typealiasNSDateFormatterBehaviorDateFormatter.BehaviorNSDateFormatterStyleDateFormatter.StyleNSDateIntervalFormatterStyleDateIntervalFormatter.StyleNSDecodingFailurePolicyCoder.DecodingFailurePolicyNSDirectoryEnumerationOptionsFileManager.DirectoryEnumerationOptionsNSDistributedNotificationOptionsDistributedNotificationCenter.OptionsNSEnergyFormatterUnitEnergyFormatter.UnitNSExpressionTypeNSExpression.ExpressionTypeNSFileCoordinatorReadingOptionsFileCoordinator.ReadingOptionsNSFileCoordinatorWritingOptionsFileCoordinator.WritingOptionsNSFileManagerItemReplacementOptionsFileManager.ItemReplacementOptionsNSFileManagerUnmountOptionsFileManager.UnmountOptionsNSFileVersionAddingOptionsFileVersion.AddingOptionsNSFileVersionReplacingOptionsFileVersion.ReplacingOptionsNSFileWrapperReadingOptionsFileWrapper.ReadingOptionsNSFileWrapperWritingOptionsFileWrapper.WritingOptionsNSFormattingContextFormatter.ContextNSFormattingUnitStyleFormatter.UnitStyleNSHTTPCookieAcceptPolicyHTTPCookie.AcceptPolicyNSInsertionPositionNSPositionalSpecifier.InsertionPositionNSItemProviderErrorCodeNSItemProvider.ErrorCodeNSJSONReadingOptionsJSONSerialization.ReadingOptionsNSJSONWritingOptionsJSONSerialization.WritingOptionsNSLengthFormatterUnitLengthFormatter.UnitNSLinguisticTaggerOptionsNSLinguisticTagger.OptionsNSLocaleLanguageDirectionLocale.LanguageDirectionNSMachPortOptionsNSMachPort.OptionsNSMassFormatterUnitMassFormatter.UnitNSMatchingFlagsRegularExpression.MatchingFlagsNSMatchingOptionsRegularExpression.MatchingOptionsNSMeasurementFormatterUnitOptionsMeasurementFormatter.UnitOptionsNSNetServiceOptionsNetService.OptionsNSNetServicesErrorNetService.ErrorCodeNSNotificationCoalescingNotificationQueue.NotificationCoalescingNSNotificationSuspensionBehaviorDistributedNotificationCenter.SuspensionBehaviorNSNumberFormatterBehaviorNumberFormatter.BehaviorNSNumberFormatterPadPositionNumberFormatter.PadPositionNSNumberFormatterRoundingModeNumberFormatter.RoundingModeNSNumberFormatterStyleNumberFormatter.StyleNSOperationQueuePriorityOperation.QueuePriorityNSPersonNameComponentsFormatterOptionsPersonNameComponentsFormatter.OptionsNSPersonNameComponentsFormatterStylePersonNameComponentsFormatter.StyleNSPointerFunctionsOptionsPointerFunctions.OptionsNSPostingStyleNotificationQueue.PostingStyleNSPredicateOperatorTypeComparisonPredicate.OperatorNSProcessInfoThermalStateProcessInfo.ThermalStateNSPropertyListFormatPropertyListSerialization.PropertyListFormatNSPropertyListMutabilityOptionsPropertyListSerialization.MutabilityOptionsNSPropertyListReadOptionsPropertyListSerialization.ReadOptionsNSPropertyListWriteOptionsPropertyListSerialization.WriteOptionsNSRegularExpressionOptionsRegularExpression.OptionsNSRelativePositionNSRelativeSpecifier.RelativePositionNSSearchPathDirectoryFileManager.SearchPathDirectoryNSSearchPathDomainMaskFileManager.SearchPathDomainMaskNSSocketNativeHandleSocket.NativeHandleNSStreamEventStream.EventNSStreamStatusStream.StatusNSStringCompareOptionsNSString.CompareOptions同样适用于String见下文NSStringEncodingNSString.Encoding同样适用于String见下文NSStringEncodingConversionOptionsNSString.EncodingConversionOptions同样适用于String见下文NSStringEnumerationOptionsNSString.EnumerationOptionsNSTaskTerminationReasonTask.TerminationReasonNSTestComparisonOperationNSSpecifierTest.TestComparisonOperationNSTextCheckingTypeTextCheckingResult.CheckingTypeNSTimeZoneNameStyleTimeZone.NameStyleNSURLCacheStoragePolicyURLCache.StoragePolicyNSURLCredentialPersistenceURLCredential.PersistenceNSURLRelationshipFileManager.URLRelationshipNSURLRequestCachePolicyURLRequest.CachePolicyNSURLRequestNetworkServiceTypeURLRequest.NetworkServiceTypeNSURLSessionAuthChallengeDispositionURLSession.AuthChallengeDispositionNSURLSessionResponseDispositionURLSession.ResponseDispositionNSURLSessionTaskStateURLSessionTask.StateNSURLSessionTaskMetricsResourceFetchTypeURLSessionTaskMetrics.ResourceFetchTypeNSUserNotificationActivationTypeNSUserNotification.ActivationTypeNSVolumeEnumerationOptionsFileManager.VolumeEnumerationOptionsNSWhoseSubelementIdentifierNSWhoseSpecifier.SubelementIdentifierNSXMLDocumentContentKindXMLDocument.ContentKindNSXMLDTDNodeKindXMLDTDNode.KindNSXMLNodeKindXMLNode.KindNSXMLParserErrorXMLParser.ErrorCodeNSXMLParserExternalEntityResolvingPolicyXMLParser.ExternalEntityResolvingPolicyNSXPCConnectionOptionsNSXPCConnection.Options命名要点某些类型即使新名字仍带NS如NSData.Base64DecodingOptions、NSAppleEventDescriptor.SendOptions是因为宿主类型本身依据规则 0/1/3 保留了前缀值类型Data会额外提供typealias让 Swift 侧可以写作Data.ReadingOptions。NSString.CompareOptions、NSString.Encoding、NSString.EncodingConversionOptions三者在String上也有等价物后文String.Encoding是其中最重要的一项。五、详细设计更新后的枚举与选项集附完整代码SE-0086 不仅改名还顺手统一了枚举成员的命名风格成员去掉后缀、no更名为none、NSExpressionType成员后缀被移除。以下代码均为提案原文设计可直接对照验证。5.1Expression.ExpressionTypeNSExpressionType枚举成员去掉Expression后缀extension Expression { public enum ExpressionType : UInt { case constantValue case evaluatedObject case variable case keyPath case function case unionSet case intersectSet case minusSet case subquery case aggregate case anyKey case block available(OSX 10.11, iOS 9.0, *) case conditional } }5.2ComparisonPredicate系列与ComparisonPredicate关联的枚举/选项集去掉后缀Operator中还包含反引号包裹的关键字成员case \inextension ComparisonPredicate { public struct Options : OptionSet { public init(rawValue: UInt) public static var caseInsensitive: ComparisonPredicate.Options { get } public static var diacriticInsensitive: ComparisonPredicate.Options { get } public static var normalized: ComparisonPredicate.Options { get } } public enum Modifier : UInt { case direct case all case any } public enum Operator : UInt { case lessThan case lessThanOrEqualTo case greaterThan case greaterThanOrEqualTo case equalTo case notEqualTo case matches case like case beginsWith case endsWith case in case customSelector case contains case between } }5.3DateIntervalFormatter.Style与NumberFormatter.StyleNSDateFormatterStyle与NSDateIntervalFormatterStyle去掉Style后缀且no更名为noneextension DateIntervalFormatter { available(OSX 10.10, iOS 8.0, *) public enum Style : UInt { case none case short case medium case long case full } }NSNumberFormatterStyle同样去掉Style后缀、no更名为none并保留平台可用性标注extension NumberFormatter { public enum Style : UInt { case none case decimal case currency case percent case scientific case spellOut available(OSX 10.11, iOS 9.0, *) case ordinal available(OSX 10.11, iOS 9.0, *) case currencyISOCode available(OSX 10.11, iOS 9.0, *) case currencyPlural available(OSX 10.11, iOS 9.0, *) case currencyAccounting } }5.4 XML 三件套ContentKind、DTDNode.Kind、Node.KindNSXMLDocumentContentKind、NSXMLDTDNodeKind与NSXMLNodeKind被重命名并嵌套extension XMLDocument { public enum ContentKind : UInt { case xml case xhtml case html case text } } extension XMLDTDNode { public enum Kind : UInt { case generalEntity case parsedEntity case unparsedEntity case parameterEntity case predefinedEntity case cdataAttribute case idAttribute case idRefAttribute case idRefsAttribute case entityAttribute case entitiesAttribute case nmTokenAttribute case nmTokensAttribute case enumerationAttribute case notationAttribute case undefinedElementDeclaration case emptyElementDeclaration case anyElementDeclaration case mixedElementDeclaration case elementDeclarationElement } } extension XMLNode { public enum Kind : UInt { case invalid case document case element case attribute case namespace case processingInstruction case comment case text case dtd case entityDeclaration case attributeDeclaration case elementDeclaration case notationDeclaration } }六、保留 NS 前缀的类型除上述清单外所有未在提案中枚举的类与类型继续保留NS前缀如NSObject、NSString、NSArray、NSAttributedString、NSLock家族、NSCache、NSXPCConnection等。未来新增 API 将按照判定规则一节列出的规则逐案case-by-case决定。七、NSStringEncoding重构游离常量收敛为String.Encoding字符编码是本次重构中最具代表性的 API 形态改进。改造前编码以自由漂浮的全局常量形式暴露底层只是一个UInt类型别名public typealias NSStringEncoding UInt public var NSASCIIStringEncoding: UInt { get } public var NSNEXTSTEPStringEncoding: UInt { get } public var NSJapaneseEUCStringEncoding: UInt { get } public var NSUTF8StringEncoding: UInt { get } public var NSISOLatin1StringEncoding: UInt { get } public var NSSymbolStringEncoding: UInt { get } public var NSNonLossyASCIIStringEncoding: UInt { get } public var NSShiftJISStringEncoding: UInt { get } public var NSISOLatin2StringEncoding: UInt { get } public var NSUnicodeStringEncoding: UInt { get } public var NSWindowsCP1251StringEncoding: UInt { get } public var NSWindowsCP1252StringEncoding: UInt { get } public var NSWindowsCP1253StringEncoding: UInt { get } public var NSWindowsCP1254StringEncoding: UInt { get } public var NSWindowsCP1250StringEncoding: UInt { get } public var NSISO2022JPStringEncoding: UInt { get } public var NSMacOSRomanStringEncoding: UInt { get } public var NSUTF16StringEncoding: UInt { get } public var NSUTF16BigEndianStringEncoding: UInt { get } public var NSUTF16LittleEndianStringEncoding: UInt { get } public var NSUTF32StringEncoding: UInt { get } public var NSUTF32BigEndianStringEncoding: UInt { get } public var NSUTF32LittleEndianStringEncoding: UInt { get }改造后这些常量被收纳进String下名为Encoding的RawRepresentable结构体作为静态成员存在命名也统一为小驼峰extension String { public struct Encoding : RawRepresentable { public var rawValue: UInt public init(rawValue: UInt) public static var ascii { get } public static var nextstep { get } public static var japaneseEUC { get } public static var utf8 { get } public static var isoLatin1 { get } public static var symbol { get } public static var nonLossyASCII { get } public static var shiftJIS { get } public static var isoLatin2 { get } public static var unicode { get } public static var windowsCP1251 { get } public static var windowsCP1252 { get } public static var windowsCP1253 { get } public static var windowsCP1254 { get } public static var windowsCP1250 { get } public static var iso2022JP { get } public static var macOSRoman { get } public static var utf16 { get } public static var utf16BigEndian { get } public static var utf16LittleEndian { get } public static var utf32 { get } public static var utf32BigEndian { get } public static var utf32LittleEndian { get } } }迁移对照示例String(data: data, encoding: .utf8)取代了旧式的String(data: data, encoding: NSUTF8StringEncoding)rawValue依然保留UInt保证与底层 Objective-C 编码值兼容同时类型安全与可读性大幅提升。八、对现有代码的影响迁移是必经之路SE-0086 的影响简单而直接所有 Swift 项目都必须经过一次迁移步骤才能使用新名称。这包括类型名的机械替换NSURLSession→URLSession等枚举/选项集写法改为点语法嵌套访问JSONSerialization.ReadingOptions等String.Encoding对全局编码常量的替代NSTask→Process这类伴随语义收敛的改名ProcessInfo接管参数获取。在工具链层面Swift 3 的迁移器migrator会基于 API notes 与自动翻译规则完成大部分机械改名但对于NSTask → Process这类涉及 API 语义合并的变更仍需开发者手动确认。这也是 Swift 3 被称为最后一个大规模源码破坏性变更版本的原因之一——从 releases/swift-3_0.md 可以看到SE-0086 被正式列入 Swift 3.02016-09-13 发布的演进提案清单与 SE-0069、SE-0005、SE-0006、SE-0088libdispatch 现代化 等一同构成了 Swift 3 统一命名体验的整体。九、备选方案为什么不把所有 NS 全部去掉评审中曾考虑过把 Foundation 中所有NS前缀全部去掉的更激进方案但最终被否决原因有二与标准库类型冲突全量去前缀会与标准库既有类型产生大量命名冲突例如Stream、Process、OutputStream的冲突已在正文中通过改名与协商解决但全面放开会导致更多冲突框架边界名不副实虽然 Foundation 的框架边界在程序上是画去前缀分界线的容易位置但现实是 Foundation 中混有大量属于 AppKit/UIKit 等更高层框架命名空间的 API如NSUserNotification、NSXPCConnection。高层框架仍保留自己的前缀这类类型也应当匹配保留。最终方案通过先识别最适合去前缀的候选类型的方式在激进与保守之间取得了平衡。十、总结SE-0086 的历史意义与实践启示SE-0086 是 Swift 3 时代API 设计与命名规范运动在 Core Libraries 层面的收官之作。它带来的影响至今仍体现在每一行 Swift 代码中命名即设计URLSession、JSONSerialization、NotificationCenter、UserDefaults、FileManager、DateFormatter、String.Encoding等名称已成为现代 Swift 开发的标准词汇从仓库内数十份后续提案如 SE-0167 编码器、SE-0300 continuation、SE-0314 async stream中可以持续看到这些命名被广泛沿用规则比名单重要提案给出的三条主要规则 四条存量规则为日后新增 Foundation API 提供了可复用的决策框架也让社区理解为什么NSObject保留而NSURL改名迁移工具与语义改善并行改名不只是字符串替换String.Encoding、Process、嵌套枚举等重构让 API 同时获得了类型安全与可读性收益。对希望从源码层面继续追踪这一演进的读者建议依次阅读本仓库中的 SE-0086 提案原文、配套的 SE-0069 值类型提案、命名规范源头 SE-0023 与 SE-0005再结合 Swift 3.0 发布说明 中的完整提案清单即可构建出 Swift 3 API 革命的全景图。赞分享文档【免费下载链接】swift-evolutionThis maintains proposals for changes and user-visible enhancements to the Swift Programming Language.项目地址https://gitcode.com/gh_mirrors/sw/swift-evolution点击查看免费下载相关推荐Swift Evolution SE-0059 深度解析从 form 前缀到 Swift 3 Set 系列 API 的全面重命名Swift Evolution SE 0059 深度解析从 form 前缀到 Swift 3 Set 系列 API 的全面重命名 导读 SE 0059 Up文档Swift Evolution SE-0006 深度解读API 设计指南在标准库中的全面落地与 Swift 3 大规模 API 重命名Swift Evolution SE 0006 深度解读API 设计指南在标准库中的全面落地与 Swift 3 大规模 API 重命名 导读 SE 0006文档Swift Evolution SE-0036 解读强制枚举 case 使用前导点前缀统一 Swift 枚举静态成员语法Swift Evolution SE 0036 解读强制枚举 case 使用前导点前缀统一 Swift 枚举静态成员语法 本篇技术指南基于 swift ev文档创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
