Swift利用类名动态创建实例对象

Swift 利用类名动态创建实例对象 OC 通过字符串创建实例对象 Swift 中通过字符串创建实例对象 Swift 利用类名动态创建实例对象 OC 通过字符串创建实例对象 在OC中我们可以通过下列方法轻松创建实例对象 NSString *className = @"UIView"; Class class = NSClassFromString(className); UIView *view = [[class alloc] init]; Swift 中通过字符串创建实例对象 获取命名空间 func currentNameSpace() -> String? { guard let spaceName = Bundle.main.infoDictionary!["CFBundleExecutable"] as? String else { print("获取命名空间失败") return nil } return spaceName } 获取类名并创建实例对象 func registerAdapters<T>() -> [T]? where T: Adapter { guard let spaceName = currentNameSpace() else { return nil } var adapters: [T] = [] for adapter in adaptersName { let fullName = spaceName + "....

July 2, 2021 · Jdy

Swift利用协议实现前缀功能

Swift利用协议实现前缀功能 想要实现的功能 存在的问题 解决方案 属性前增加前缀(不优雅) 点语法增加前缀 一、持有属性方式 二、使用范型 给String扩充类型方法 三、利用协议实现前缀 Swift利用协议实现前缀功能 想要实现的功能 计算字符串中数字的个数 var greeting = "1234-Hello, playground-1234" extension String { var numberCount: Int { var number = 0 for c in self where ("0"..."9").contains(c){ number += 1 } return number } } print(greeting.numberCount) 存在的问题 直接给一个类增加扩展,容易导致冲突。 解决方案 属性前增加前缀(不优雅) var greeting = "1234-Hello, playground-1234" extension String { var zy_numberCount: Int { var number = 0 for c in self where ("0"....

July 1, 2021 · Jdy

Swift中的属性

Swift 中的属性 实例属性 存储属性 计算属性 Example 枚举 rawValue 原理 延迟存储属性(Lazy Stored Property) 属性观察器(Property Observe) 全局变量,局部变量 inout 的再次研究 类型属性 (Type Property) 类型属性细节 单例模式 协议中的属性 Swift 中的属性 实例属性 存储属性 类似成员变量的概念 存储在实例的内存中 结构体、类可以定义存储属性 ✅ 枚举不可以定义存储属性 ❎ 在创建类或结构体实例的时候,必须为所有实例属性设置一个合适的初始值 可以在初始化器里为存储属性设置一个初始值 可以分配一个默认的属性值作为属性定义的一部分 计算属性 本质就是方法(函数) 不占用实例的内存 枚举、结构体、类都可以定义计算属性 set 传入的新值默认叫做 newValue,也可以自定义 struct Circle { var radius: Double var diameter: Double { set (newDiameter) { radius = newDiameter / 2 } get { radius * 2 } } } 定义计算属性只能用 var,不能用 let let 代表常量,值是一成不变的 计算属性的值是可能发生变化的(即使是只读计算属性) 上述例子中的 radius 改变会导致 diameter 变化 只读计算属性:只有 get,没有 set struct Circle { var radius: Double var diameter: Double { radius * 2 } } Example struct Circle { // 存储属性 var radius: Double // 计算属性 var diameter: Double { set { radius = newValue / 2 } get { radius * 2 } } } var circle = Circle(radius: 5) print(circle....

June 17, 2021 · Jdy