编程导航Swift话题讨论

Swift

12 参与
分享

快来分享你的内容吧~

点击登录,快来和大家讨论吧~
表情
图片
话题
打卡
综合
交流
文章
问答

Clipaste,又一个Mac剪切板工具

## 做这个软件的原因是,Paste太贵了,破解版不能iCloud同步,剪切助手也暂停开发了,PasteNow不支持横版,并且复制大文本滚动起来会非常卡顿,所以就动手开发了一个,欢迎鱼友们体验,付费开通了苹果开发者,可以支持iCloud同步,如果你觉得还不错,欢迎Star,同时也希望参与开源,一起完善这个工具 ## 项目地址 https://github.com/gangz1o/Clipaste # 📋 Clipaste Clipaste 是一个基于 **SwiftUI** 和 **SwiftData** 构建的 macOS 剪贴板管理器。 它的核心目标很明确:**历史记录再多、文本再大,也要保持响应迅速、滚动丝滑、内存占用可控。** ## ✨ 亮点 * 🚀 响应迅速,常用操作几乎即时完成 * 🧠 内存占用小,长时间运行也更稳定 * 🗂️ 面对超大剪贴板历史仍然保持顺滑不卡顿 * 📝 面对超大文本内容时依然流畅,不会因为内容变重而明显拖慢界面 * 🐸 后台自动ocr识别图片内容,支持搜索图片内文字 * 🔄 可迁移 **Paste**、**PasteNow**、**iCopy**,**Maccy** 的历史数据 * 🎏 UI 同时支持横向和纵向布局 * ☁️ 支持可选的 iCloud / CloudKit 同步 * 💕 开源免费 ## 🧩 预览 <div align="center"> <img src="https://cdn.nodeimage.com/i/Rehrs8FAKYh2SngzRtC9DBq4nqDoDMB8.webp" width="40%" /> <img src="https://cdn.nodeimage.com/i/Rehrs8FAKYh2SngzRtC9DBq4nqDoDMB8.webp" width="40%" /> </div> <br /> <div align="center"> <img src="https://cdn.nodeimage.com/i/i4Jab3co3VW1kOKL2zEkzIQNsiINGp9p.webp" width="40%" /> <img src="https://cdn.nodeimage.com/i/jRQP3zlsLV94nuvaoc7Cz781a8u50zVL.webp" width="40%" /> </div> <br /> ## 🏎️ 为什么是 Clipaste Clipaste 重点解决的是很多剪贴板工具在重负载场景下会暴露的问题: * 历史记录一多就开始卡 * 大文本一多就开始慢 * 滚动和搜索在重内容场景下不够稳定 Clipaste 的设计目标相反: * 历史记录很多时仍然保持丝滑 * 大文本内容仍然保持可操作性 * 搜索、预览、再次粘贴保持快速反馈 * 不靠明显增加内存占用来换取表面流畅 如果你用过 Paste 或 PasteNow,Clipaste 的差异点很直接: * 更强调大历史记录下的性能稳定性 * 更强调大文本内容下的响应速度 * 提供它们没有覆盖到的布局与开源可定制能力 ## 🔄 历史迁移 Clipaste 支持从以下应用迁移历史数据: * Paste * PasteNow * iCopy * Maccy 目标很简单:切换工具时,不需要放弃原有历史记录。 ## 🧱 技术栈 * **SwiftUI**:界面构建 * **SwiftData**:存储与迁移 * **CloudKit**:可选同步能力 * 原生 macOS 应用架构 ## 🖥️ 系统要求 * macOS 14.0+ * Xcode 16+ ## 📦 安装 推荐使用 Homebrew 安装: ```bash brew tap gangz1o/clipaste brew install --cask gangz1o-clipaste ``` 更新 Clipaste 有两种方式: * 使用应用内更新 * 通过 Homebrew 更新: ```bash brew update brew upgrade --cask gangz1o-clipaste ``` ## 🛠️ 本地构建 1. 用 Xcode 打开 `clipaste.xcodeproj` 2. 如果你要在本地运行带 iCloud / Push entitlement 的版本,请选择你自己的签名团队 3. 直接构建运行 如果你 fork 这个项目并准备自行发布,还需要替换你自己的: * Bundle Identifier * iCloud Container * Apple 签名配置 ## 🚢 发布 维护者可以通过仓库内的 GitHub Actions 工作流自动生成并上传 notarized DMG,详见 [RELEASING.md](RELEASING.md)。

学习笔记-Swift 运算符

在 Swift 编程语言中,**运算符(Operators)** 是用于执行特定操作的符号。以下是 Swift 支持的运算符分类及详细说明: --- ### 一、算术运算符 - **基本算术**: ```swift let a = 10 + 5 // 加 let b = 10 - 5 // 减 let c = 10 * 5 // 乘 let d = 10 / 3 // 除(结果为 3) let e = 10 % 3 // 取余(结果为 1) ``` - **浮点数取余**: ```swift let f = 10.5.truncatingRemainder(dividingBy: 3) // 1.5 ``` --- ### 二、复合赋值运算符 ```swift var x = 5 x += 3 // x = 8 x -= 2 // x = 6 x *= 4 // x = 24 ``` --- ### 三、比较运算符 ```swift 1 == 1 // true 1 != 2 // true 2 > 1 // true 2 < 5 // true 3 >= 3 // true // 恒等运算符(判断对象引用) let obj1 = UIView() let obj2 = obj1 obj1 === obj2 // true ``` --- ### 四、逻辑运算符 ```swift true && false // false(逻辑与) true || false // true (逻辑或) !true // false(逻辑非) // 短路求值:若左侧已确定结果,右侧不会执行 false && someExpensiveFunction() ``` --- ### 五、三元条件运算符 ```swift let score = 85 let result = score >= 60 ? "及格" : "不及格" // "及格" ``` --- ### 六、Nil 合并运算符 ```swift let defaultName = "Guest" var userName: String? = nil let finalName = userName ?? defaultName // "Guest" ``` --- ### 七、区间运算符 - **闭区间** (`a...b`): ```swift for i in 1...5 { print(i) } // 输出 1-5 ``` - **半开区间** (`a..<b`): ```swift let names = ["A", "B", "C"] for i in 0..<names.count { print(names[i]) } ``` - **单侧区间**: ```swift let range = ...5 // 包含所有小于等于5的数 ``` --- ### 八、位运算符 ```swift let a: UInt8 = 0b00110011 let b: UInt8 = 0b11100001 a & b // 按位与 (0b00100001) a | b // 按位或 (0b11110011) a ^ b // 按位异或 (0b11010010) ~a // 按位取反 (0b11001100) a << 2 // 左移两位 (0b11001100) ``` --- ### 九、溢出运算符 处理数值溢出场景: ```swift let maxUInt8 = UInt8.max // 255 let overflow = maxUInt8 &+ 1 // 0(溢出后归零) ``` --- ### 十、运算符优先级与结合性 优先级从高到低示例(完整列表参考官方文档): 1. `[]` `()`(成员访问、函数调用) 2. `!` `~` `+` `-`(前缀运算符) 3. `*` `/` `%` 4. `+` `-` 5. `<<` `>>` 6. `<` `<=` `>` `>=` 7. `==` `!=` 8. `&&` 9. `||` 10. 三元运算符 `?:` --- ### 十一、自定义运算符 Swift 允许定义新运算符或重载现有运算符: ```swift // 定义幂运算符 infix operator ** : MultiplicationPrecedence func ** (base: Int, power: Int) -> Int { return Int(pow(Double(base), Double(power))) } print(2 ** 3) // 8 ``` --- ### 关键特性 - **类型安全**:禁止隐式类型转换(如 `Int + Double` 需显式转换)。 - **运算符重载**:可为自定义类型实现运算符逻辑。 - **空安全**:可选类型需解包后才能参与运算(使用 `??` 或强制解包)。 通过合理使用运算符,可以编写简洁高效的 Swift 代码。

学习笔记-Swift 字面量

在 Swift 编程语言中,**字面量(Literals)** 是直接在代码中表示的固定值。以下是 Swift 支持的主要字面量类型及示例: --- ### 1. **整型字面量** - **十进制**:无前缀(默认) ```swift let decimalInt = 42 ``` - **二进制**:`0b` 前缀 ```swift let binaryInt = 0b101010 // 十进制 42 ``` - **八进制**:`0o` 前缀 ```swift let octalInt = 0o52 // 十进制 42 ``` - **十六进制**:`0x` 前缀 ```swift let hexInt = 0x2A // 十进制 42 ``` --- ### 2. **浮点型字面量** - **小数形式**: ```swift let doubleValue = 3.14159 let floatValue: Float = 2.5 ``` - **指数形式**: ```swift let scientific = 1.25e2 // 125.0 let hexFloat = 0xFp2 // 60.0 (十六进制 15 * 2^2) ``` --- ### 3. **布尔型字面量** ```swift let isTrue = true let isFalse = false ``` --- ### 4. **字符串与字符字面量** - **字符串**(双引号): ```swift let greeting = "Hello, Swift!" ``` - **多行字符串**(三引号): ```swift let multiLineString = """ Line 1 Line 2 """ ``` - **字符**(双引号,仅单个字符): ```swift let char: Character = "A" ``` - **原始字符串**(避免转义,用 `#` 包裹): ```swift let rawString = #"This is a "raw" string \n不会被转义"# ``` --- ### 5. **数组字面量** ```swift let numbers = [1, 2, 3] let emptyArray: [String] = [] ``` --- ### 6. **字典字面量** ```swift let person = ["name": "Alice", "age": 30] let emptyDict: [String: Int] = [:] ``` --- ### 7. **特殊字面量** - **Nil 字面量**(表示空值): ```swift var optionalValue: Int? = nil ``` --- ### 8. **数值字面量的可读性增强** 使用下划线 `_` 分隔数字以提高可读性: ```swift let million = 1_000_000 // 1000000 let hexNumber = 0xFF_FF_FF // 16777215 ``` --- ### 关键特性 - **类型推断**:Swift 自动推断字面量类型(如 `42` 默认为 `Int`,`3.14` 默认为 `Double`)。 - **显式类型标注**:可强制指定类型: ```swift let floatLiteral: Float = 3.14 ``` 通过合理使用字面量,可以简化代码并提升可读性。

Swift 可选(Optionals)类型

在 Swift 中,可选类型(Optionals)是一种特殊的类型,用于表示一个值可能存在或不存在。可选类型可以包含一个具体的值,也可以是 nil,表示没有值。可选类型是 Swift 语言中处理空值的一种强大机制。 1. 基本概念 可选类型:表示一个值可能存在或不存在的类型。 非可选类型:表示一个值必须存在,不能为 nil。 2. 定义可选类型 你可以通过在类型后面加上 ? 来定义一个可选类型。 ```swift var optionalInt: Int? = 5 var optionalString: String? = "Hello, World!" var optionalBool: Bool? = true ``` 3. 初始化为 nil 可选类型可以初始化为 nil,表示没有值。 ```swift var optionalInt: Int? = nil var optionalString: String? = nil var optionalBool: Bool? = nil ``` 4. 解包可选类型 要访问可选类型中的值,需要进行解包(Unwrapping)。Swift 提供了多种解包方式。 4.1 强制解包(Force Unwrapping) 使用 ! 进行强制解包。如果可选类型为 nil,程序会抛出运行时错误。 ```swift var optionalInt: Int? = 5 print(optionalInt!) // 输出 5 optionalInt = nil print(optionalInt!) // 运行时错误 ``` 4.2 可选绑定(Optional Binding) 使用 if let 或 guard let 进行安全解包。 if let ```swift var optionalInt: Int? = 5 if let value = optionalInt { print(value) // 输出 5 } else { print("optionalInt is nil") } ``` guard let ```swift func printValue(_ value: Int?) { guard let value = value else { print("value is nil") return } print(value) } printValue(5) // 输出 5 printValue(nil) // 输出 "value is nil" ``` 5. 隐式解包可选类型(Implicitly Unwrapped Optionals) 隐式解包可选类型(Implicitly Unwrapped Optionals)是一种特殊的可选类型,用 ! 表示。这种类型的变量在使用时会自动解包,但如果没有值(即为 nil),程序会抛出运行时错误。 ```swift var implicitOptionalInt: Int! = 5 print(implicitOptionalInt) // 输出 5 implicitOptionalInt = nil print(implicitOptionalInt) // 运行时错误 ``` 6. 可选链(Optional Chaining) 可选链允许你在一个可选类型上连续调用属性、方法或下标,而不会引发运行时错误。如果可选类型为 nil,整个表达式的结果也为 nil。 ```swift class Person { var name: String? var address: Address? } class Address { var street: String? } var person = Person() person.name = "Alice" person.address = Address() person.address?.street = "123 Main St" print(person.name ?? "Unknown") // 输出 "Alice" print(person.address?.street ?? "Unknown") // 输出 "123 Main St" ``` 7. 可选映射(Optional Mapping) 使用 map 方法可以对可选类型进行转换,如果可选类型为 nil,则返回 nil。 ```swift let optionalInt: Int? = 5 let optionalString = optionalInt.map { String($0) } print(optionalString ?? "nil") // 输出 "5" ```

《Beginning iOS Programming with Swift and SwiftUI》

地址:https://pan.baidu.com/s/1D0Tk42U5V41FenBMzV8bzw?pwd=8xnp

youtube-iOS

地址:https://github.com/aslanyanhaik/youtube-iOS

《Beginning iOS Programming with Swift and SwiftUI》

提取码: u7r8 地址:https://pan.baidu.com/s/1tE5rirr04whF5R7JVajCpA?pwd=u7r8

《Swift基础教程》(第2版)

地址:https://www.aliyundrive.com/s/4V1SNKMV7j1

《Swift 编程权威指南》(第2版)

地址:https://www.aliyundrive.com/s/H7WPqehy5PF

eul

地址:https://github.com/gao-sun/eul

下载 APP