公开标签 #Swift
Xcode 26 带来了一个新功能——Approachable Concurrency,苹果说是让并发编程更容易。之前用 async/await 经常遇到莫名其妙的编译错误,代码逻辑没问题但编译器就是报错,特别是那些 Sendable、隔离相关的问题。用了这个功能后确实好了不少,编译器不会动不动就报错了。什么是 Approachable ConcurrencyApproachable Concurrency 是 Swift 6.2 的一组特性,通过编译器开关 SWIFT_APPROACHABLE_CON
Apple 官方出品,稳定性自然不用担心。自从 Swift 5.5 引入 async/await,异步编程确实方便了不少,不过处理异步序列时,原生 API 的功能还是相对有限。这个库很好地填补了这个空白。使用这个库处理异步数据流的体验确实不错。像合并多个异步序列、节流控制、数据去重这些操作,以前需要写不少代码,现在几行就能解决:// 合并多个异步序列let merged = merge(sequence1, sequence2, sequence3)// 节流操作,避免更新太频繁let throttle
手把手教你在 SwiftUI 中实现推送通知。第一步:请求推送权限在 SwiftUI 中,我们需要先导入必要的框架,然后创建一个自定义的 AppDelegate。是的,即使是 SwiftUI,推送通知还是需要用到 AppDelegate(希望苹果以后能改进这点)。import SwiftUIimport UserNotifications// 自定义 AppDelegateclass CustomAppDelegate: NSObject, UIApplicationDelegate, Observab
大家平时在用 App 的时候肯定都见过这种效果,在详情页顶部放一张大图,往下一拉还能跟着变大,视觉冲击力直接拉满。说实话,以前我一直以为这种效果很难搞,得写一堆乱七八糟的代码,结果最近发现 SwiftUI 里居然有个骚操作,三行代码就能实现。网上一搜"SwiftUI 拉伸头部",十有八九都是用 onScrollGeometryChange() 监听滚动偏移,然后把 offset 写到某个 state 里,再用来算图片 frame,能用,但是真的麻烦:要多维护一个 state,代码臃肿,滚动监听和 UI
Swift 6 带来了大量关于并发的更新,开发团队为此付出了巨大的努力。最大的变化是完整的并发检查默认启用。如果你的代码中有很多并发相关的使用,那么你的代码要升级到 6.0 很可能需要进行一些调整。 Swift 6 进一步改进了并发检查,并且 Swift 团队表示它“移除了许多在 5.10 中的假数据竞争警告”。它还引入了几个有针对性的变化,使并发更容易使用。 其中,最重要的是 SE-0414,它定义了隔离区域,让编译器能够明确证明代码的不同部分可以并发运行。 这个变化的核心是现有的可发送性(senda
Swift 编程语言以开源的形式存在,任何有创意和想法的人都可以为其贡献新功能。所有对 Swift 的建议都会在公共论坛上进行讨论,其他人也会针对你提出的建议给出评论和修改意见。最终,你的建议完善后将被批准,最后再发布到某一个 Swift 版本中。 任何人想要改进 Swift,都需要先写一份“提案”,提案中包含了你建议的修改内容。 如果你不知道如何写提案,可以参考官方给出的提案模版。 一个完整的提案主要包含以下内容: 提案介绍:简单介绍下你提出的功能。 动机:描述本提案试图解决的问题,说明为什么这个新功
Swift 5.10是 Swift 5 的最后一个版本,下个版本就是 Swift 6.0 了。 增强的并发检查 在此之前,使用并发代码编译器可能在某些情况下无法检测安全问题。在 Swift 5.10 中,Apple 已经修补了这些情况,编译器现在将在严格并发模式下正确标记所有不安全的代码。 但是这不包括你标记 nonisolated(unsafe) 或者 @unchecked Sendable 的代码,因为这两个标记都指示代码应该是安全的,但编译器将无法检查。 关于这点,在之后的 Swift 版本中会
Swift 中的 String 和 NSString 是可以用 as 无缝转换的,但是 String 的 count 属性和 NSString 的 length 的值可能不同。 例如 let swiftString = "👨👩👧👦" let nsString = swiftString as NSString print(swiftString.count) // 打印 1 print(nsString.length) // 打印 11 同样是一个 emoji 符号,Swift String 的
Regex Regex 类型是 iOS 16 新出的一个类型,利用这个类型可以很容易地生成正则表达式: let pat = #"(\d+)"let reg = try Regex(pat) 这种创建方式和 NSRegularExpression 差不多,你需要将特殊符号用反斜杠标记,使用 try 来捕获异常情况。 为了不出现上面的创建步骤,swift 出了一种使用两个斜杠"/.../"来直接生成 Regex 的方法,以上代码等同于: let reg = /(\d+)/ 通过正则语法糖的方式生成正则表达式
Swift 是编写程序的绝佳选择,无论是手机、电脑还是服务器,任何能跑代码的设备都是如此。它是一门集现代语言之大成,集结了苹果的工程师文化精髓以及开源社区多样化于一身的编程语言。编译器为专为性能所调优,语言专为开发所优化,二者绝不互相妥协。 Swift 语言还对新的程序员十分友好。它是第一个工业级系统编程语言,却又像脚本语言那样富有张力且十分有趣。在 Playground 编写代码并实时查看 Swift 代码运算结果,完全不需要从头编译然后运行软件。 Swift 通过向其他现代编程模式学习,定义了大量类