Swift才是未来
文章平均质量分 61
不说人话的技术博客都是在耍流氓
依旧风轻
葵花成海,你在不在
展开
-
Swift 中 map 和 flatMap 的区别 (入门版)
在 Swift 中,`map` 和 `flatMap` 是用于处理集合类型(如数组、字典、集合等)的两个重要方法。尽管它们看起来相似,但它们在处理集合中的元素和结果时有着不同的行为。原创 2024-07-08 03:54:10 · 618 阅读 · 0 评论 -
如果多个类都实现了 MyProtocol,在运行时,当通过协议类型调用方法时,系统怎么确认应该用哪个 Witness Table ?
在 Swift 中,当多个类实现了同一个协议时,系统在运行时通过实例对象的类型元数据和对应的 Witness Table 来确定具体调用哪个实现。每个实例对象包含一个指向其类型元数据的指针,通过这个指针,Swift 能够找到并使用正确的 Witness Table 来执行协议方法的具体实现。这种机制保证了协议调用的灵活性和高效性。原创 2024-07-04 00:33:13 · 566 阅读 · 0 评论 -
Witness Table 的由来
Witness Table 是 Swift 编译器生成的数据结构,用于确保类型实现了其遵循的协议,并支持协议的动态分派。名称中的 “Witness” 表示对协议实现的证明,而 “Table” 表示这种证明的组织结构。通过 Witness Table,Swift 能够在保持高效的同时,实现灵活的协议调用和类型检查。原创 2024-07-04 00:30:05 · 527 阅读 · 0 评论 -
Swift 中的方法调用机制
在 iOS 开发中,Swift 和 Objective-C 是两种常用的编程语言。尽管它们都能用于开发应用程序,但在方法调用的底层机制上存在显著差异。本文将详细介绍 Swift 的方法调用机制,重点对比 Objective-C 的实现,并深入探讨虚表(V-Table)和 Witness Table 机制。原创 2024-07-04 00:14:18 · 1083 阅读 · 0 评论 -
Bridging nonnull in Objective-C to Swift: Is It Safe?
In the world of iOS development, bridging between Objective-C and Swift is a common practice, especially for legacy codebases (遗留代码库) or when integrating (集成) third-party libraries. One important aspect of this bridging is the handling of。原创 2024-06-26 04:03:53 · 1420 阅读 · 0 评论 -
Access Levels in Swift
Swift provides six different access levels for entities(实体) within your code. These access levels are relative to the source file in which an entity is defined, the module(模块) that source file belongs to, and the package that the module belongs to.原创 2024-06-26 03:30:53 · 728 阅读 · 0 评论 -
为什么 Swift 没有原生的 subArray 方法?
Swift 是一门设计精良的编程语言,以其灵活性和高性能著称。在 Swift 中截取数组的子数组是一个常见的操作,但你可能会发现 Swift 标准库中并没有直接提供一个 `subArray` 方法。这是为什么呢?本文将深入探讨 Swift 没有原生 `subArray` 方法的原因,并展示几种在 Swift 中截取子数组的常用方法。原创 2024-06-25 11:47:29 · 1223 阅读 · 0 评论 -
Swift 中的动态数组
Swift 的 `Array` 类型是一种强大而灵活的集合类型,可以根据需要自动扩展或缩减其容量。原创 2024-06-23 00:01:44 · 406 阅读 · 0 评论 -
Void 和 nil 大不相同
Void是 Swift 的一个类型别名,实际上等价于(),表示没有返回值。函数声明为返回Void,表示函数完成了其预期的工作,但不返回任何有用的数据。在 Swift 中,返回nil通常是通过返回一个可选类型(例如Int?或String?)来实现的。返回nil表示函数没有返回任何有效的值。返回Void:表示函数执行了预期的操作,但不返回任何具体结果。适用于执行副作用的函数。返回nil:表示函数没有返回有效值,通常用于表示操作失败或某种无效状态。适用于需要传达操作状态或结果的函数。原创 2024-06-17 00:32:51 · 447 阅读 · 0 评论 -
正向遍历和反向遍历
【代码】正向遍历和反向遍历。原创 2024-06-13 12:44:20 · 111 阅读 · 0 评论 -
Fatal error: Range requires lowerBound <= upperBound
for index in 1...5 {}原创 2024-06-11 20:09:58 · 291 阅读 · 0 评论 -
在 Swift 中, enumerated() 有哪些常用的使用方式 ?
是一个用于遍历集合类型的方法,它返回一个由每个元素的索引和值组成的元组。方法过滤了索引为偶数的元素,并使用。方法将结果转换为一个只包含值的数组。在这个例子中,我们使用。在 Swift 中,原创 2024-03-22 19:23:02 · 672 阅读 · 0 评论 -
Swift 中的 Sequence 是什么 ?
在 Swift 中,Sequence是一个协议,它表示一个可以遍历其元素的集合类型。任何遵循Sequence协议的类型都必须提供一个迭代器,用于按顺序访问其元素。迭代器是通过方法获取的,该方法返回一个遵循的对象。Sequence协议本身并不要求集合是可变的或具有索引,它只关注遍历能力。这意味着你可以遍历一个序列的元素,但不一定能够修改它们或通过索引直接访问它们。Swift 标准库中的许多集合类型,如数组(Array)、集合(Set)、字典的值()以及字符串(String),都遵循Sequence协议。原创 2024-03-22 18:41:24 · 836 阅读 · 0 评论 -
结束 guard else 只能使用 return ?
如果一个或者多个条件不成立,可用 guard 语句来退出当前作用域 (guard所在的作用域)。, guard所在的方法或者函数并不一定结束, 很多人没有意识到这一点!当 return 被执行, 程序只是退出。原创 2023-07-07 00:04:09 · 214 阅读 · 0 评论 -
当属性观察的对象是结构体
当 struct 中的某个属性被赋值, 会生成一个新的 struct 来替换旧的 struct, 新的 struct 包含新的属性?会响应 struct 属性的变化?因为 struct 是。原创 2023-07-05 00:05:02 · 141 阅读 · 0 评论 -
Swift的 ?? 运算符
Swift 中的??运算符, 官方称之为, 中文常被译作空合运算符在表达式a??b中, 将对可选类型 a 进行空判断,如果 a 包含一个值就进行解包,否则就返回一个默认值 b。表达式 a 必须是 Optional 类型。默认值 b 的类型必须要和 a 存储值的类型保持一致。// 无疑空合运算符(??)提供了一种更为优雅的方式去封装条件判断和解包两种行为,显得简洁以及更具可读性。a!= nil?a!: b注意如果 a 为非空值(non-nil),那么值 b 将不会被计算。这也就是所谓的短路求值。原创 2023-03-28 22:52:06 · 605 阅读 · 0 评论 -
CoreLocation的一切
Core Location 提供的服务可以确定设备的地理位置、高度和方向,或者它相对于附近iBeacon设备的位置。该框架使用设备上的所有可用组件收集数据,包括 Wi-Fi、GPS、蓝牙、磁力计、气压计和蜂窝硬件。原创 2023-03-13 21:12:18 · 481 阅读 · 0 评论 -
Swift中的Double转UInt32发生CRASH
译: 如果 source 在向零舍入后超出此类型的范围,则可能会发生运行时错误。原创 2023-03-08 15:15:37 · 585 阅读 · 0 评论 -
Swift 和 Objective-C 之间基本数据类型的转换
Swift 和 Objective-C 之间基本数据类型的转换整数之间// 直接使用`as`相互转换, 因为本质上是同一种类型, NSInteger 是 Int 的别名let int_0 = 2 as Intlet int_1 = int_0 as NSIntegerlet int_2 = int_1 as Int浮点数之间// 除了为字面量直接指定类型, 必须通过构造器来转换let float_0 = 2 as CGFloatlet float_1 = Float(float_0)原创 2021-08-19 00:22:43 · 511 阅读 · 0 评论 -
swift 中的 NSInteger 类型
NSInteger type in swift在Swift中, NSInteger是Int的别名, 所以它们是同一个基本数据类型, 是完全等同的./* NSObjCRuntime.h Copyright (c) 1994-2012, Apple Inc. All rights reserved.*/public typealias NSInteger = Intpublic var NSIntegerMax: Int { get }...原创 2021-08-19 00:09:22 · 696 阅读 · 0 评论 -
`swift`中字面量的默认类型
swift中字面量的默认类型The default type of literals in swift环境: Apple Swift version 5.4 (swiftlang-1205.0.26.9 clang-1205.0.19.55), macOS Big Sur 11.4Integer 整数// 默认类型为`Int`let integer_0 = 1 // 指定整数字面量的类型为`Int`let integer_1 = 1 as IntFloat 浮点数// 默认类型为原创 2021-08-19 00:03:08 · 166 阅读 · 1 评论 -
swift 中的 as 操作符
The as operator (as 操作符)对于 swift 初学者来说, as操作符尝尝使人困惑.as? operator, 可失败转换操作符 as?表示可失败的转换, 或者叫做可选转换(Optional conversion), 当转换失败, 则返回nil. 常用于Any或者AnyObject向其它类型转换. request { res, _ in if let response = res as? SQISpecifiedClass { // ... } }as!原创 2021-08-18 15:09:12 · 137 阅读 · 0 评论 -
Swift中闭包类型推断现存的一些问题
Some existing problems in closure type inference 闭包类型推断现存的一些问题运行环境: Swift 5, Xcode 12.5, macOS Big Sur 11.4声明闭包时, 建议通过类型注解(type annotation)直接限定指定的类型, 这样, 编译器一旦发现类型不匹配, 会直接报错, 在 swift 中, 应该谨慎使用闭包的自动类型推断, swift 中闭包的类型推断存在一定的不确定性, 可能和你预想的类型并不相同.自动推断为(SQI原创 2021-08-13 15:25:42 · 593 阅读 · 2 评论 -
Swift中数组字典和plist文件的转换
Swift中数组字典和plist文件的转换注意: Swfit中的Array和Dictionary是结构体,是值类型, 没有与plist相关的接口, 需要先转换为对应的Objectivc-C类型1. Array转为plist文件(Dictionary类型同理)// 可能会使用到的接口1. `Swift`高阶函数`map`(业务代码中的数组元素往往为对象类型, 需要先转换为字典类型, 此处强烈推荐使用高阶函数`map`);2. `as`转换, 不是`as?`, 也不是`as!`(若原始数据为`A原创 2020-12-23 19:38:23 · 1291 阅读 · 0 评论 -
函数的实参标签 & 形参名
// 完整的函数定义func funcName(实参标签 形参名: 类型) {// In the function body, 形参名 refers to (引用) 该参数的参数值}实参标签用在调用函数的时候(除非用_省略实参标签, 否则函数调用时, 实参的前面必须写实参标签), 定义函数时可以省略, 省略则意味者: 实参标签 == 形参名;形参名用在函数的实现当中(即大括号中);...原创 2019-05-12 13:02:33 · 533 阅读 · 0 评论 -
字符串插值
字符串插值是一种使用混合常量、变量、字面量和表达式的字符串字面量构造新 String值的方法。每一个你插入到字符串字面量的元素都要被一对圆括号包裹,然后使用反斜杠前缀:let multiplier = 3let message = "\(multiplier) times 2.5 is \(Double(multiplier) * 2.5)"// message is "3 times 2....原创 2019-05-12 12:02:15 · 1597 阅读 · 0 评论 -
全局函数print(_:separator:terminator:)
输出常量和变量let friendleWelcome = "Bonjour!"// 输出 "Bonjour!"print(friendlyWelcome)print函数分析print(_:separator:terminator:) 是一个用来把一个或者多个值用合适的方式输出的全局函数。比如说,在 Xcode 中 print(_:separator:terminator:) 函数输出的...原创 2019-05-12 11:53:09 · 738 阅读 · 0 评论 -
常量和变量
声明// 声明一个叫做 maximumNumberOfLoginAttempts 的新常量,并设置值为 10let maximumNumberOfLoginAttempts = 10 // 声明一个叫做 currentLoginAttempt 的新变量, 并且给他一个初始值 0var currentLoginAttempt = 0你可以在一行中声明多个变量或常量,用逗号分隔:var ...原创 2019-05-11 20:35:01 · 161 阅读 · 0 评论 -
关于 Swift
Swift 语言成功整合了现代语言最好的思想于一身。Swift 编译器对性能进行了优化,Swift 语言则对开发进行了优化,两者互不干扰。Swift 采用了现代编程模式,以避免大量常见的编程错误:变量永远会在被使用前完成初始化。对数组的索引操作会自动检查是否出现越界错误。整型值会自动检查是否溢出。可选值确保 nil 值被正确处理。(可选类型)内存被自动管理。错误处理允许从异常故障控...原创 2019-05-11 18:55:52 · 220 阅读 · 0 评论 -
Swift - 字典 (Dictionary)
字典 (Dictionary)存储同类型值的容器;键(key)是字典中的这个值数据(value)的唯一标识符;目前 Swift 的 Dictionary 类型被桥接到 Foundation 的 NSDictionary 类;一个字典的 Key 类型必须遵循 Hashable 协议,就像 Set 的值类型;创建// 1. 创建一个可变的空字典var dictName = [In...原创 2019-01-13 13:27:45 · 516 阅读 · 0 评论