Swift
文章平均质量分 54
Swift语言
kicinio
这个作者很懒,什么都没留下…
展开
-
diff算法swift版
前几天用chatgpt生成diff算法,配上swift的简洁语法,可以称之为锦上添花。原创 2023-04-05 21:49:14 · 294 阅读 · 0 评论 -
浅析Swift中的associatedType与objc_setAssociatedObject
前言:associatedType含义:关联一个协议使之以类似泛型参数方式编译。这句话是很抽象的,简单来说,当某个接口类内的协议参数逻辑是在Runtime期间完成的,为了确保安全性以及Buildtime期间就能发现问题,可以采用关联一个协议再命名具体实现逻辑的协议方式进行。场景:设存在一个协议为SmartDeivce,负责具体智能设备的抽象协议,由此产生PadDevice与PhoneDevice。protocol SmartDevice { }class PadDevice: Sm原创 2022-05-31 10:44:14 · 818 阅读 · 0 评论 -
浅析Swift中两种反射
前言:Swift依托OC中的Runtime机制也可实现类似Java中的反射,只不过没有两者的反射功能强大。常见最多的可能就是Mirror,实际上NSCalssFromString也是一个较为隐蔽的反射方法。Mirror:作用:动态地获取一个对象的属性、成员信息(不能获取方法,有点遗憾)举例:NSClassFromString:作用:从字符串中加载一个对象实例(有点像Java中的数据库连接池ClassforName(“com.mysql.driver”))。举例:以UITableViewC原创 2021-06-27 17:38:41 · 1478 阅读 · 0 评论 -
String与NSString,范围Range
String是结构体,属于值传递类型,而NSString是类,属于引用类型。单看NS前缀就可以猜出,这大概是与OC有密切的关系,实际上也确实如此。String与NSString转换:创建String变量:var str: String = "test"转变为NSString类型:var ns = str as! NSString从NSString转变为String:var ns: NSString = "test"var str = ns as! String范围Range:范围R原创 2021-03-09 11:52:56 · 320 阅读 · 0 评论 -
Swift for循环语句浅析
引言:Swift至3.0版本伊始就取消了传统C语言家族的for写法。下面就以某些情况下循环的写法展开讨论。从某范围开始至某范围结束(开区间,区间为递增区间)这种情况下先以C家族的for循环举例。设从[0,10)内取出每次递增的正整数,并打印,则:for(int i = 0; i < 10; i++){ System.out.println("PARA: " + i); // Or this situation of C: printf("%d",i);}原创 2021-01-08 12:36:26 · 2328 阅读 · 0 评论 -
Swift BinarySearch 二分法查找数据
代码:public func binarySearch<T: Comparable>(_ a: [T], key: T, range: Range<Int>) -> Int? { if range.lowerBound >= range.upperBound { return nil } else { let midIndex = range.lowerBound + (range.upperBound - range.l原创 2020-12-27 21:52:29 · 176 阅读 · 0 评论 -
Swift 如何生成随机数
1.生成Int类型随机数var numberOne: Int = Int(arc4random())print(numberOne)结果:3628967563说明:arc4random()直接返回UInt32类型数据2.生成Double类型随机数var numberFour: Double = drand48()print(numberFour)结果:0.39646477376027534说明:drand48()直接返回0~1内的Double类型数据(如果要生成的数据为0至某原创 2020-12-13 10:29:14 · 8710 阅读 · 0 评论 -
Swift版 通过概率计算圆周率
代码:class Pi{ public static func caculate() -> Double{ let n = 1000000 var k = 0 for _ in 1..<n { let x: Double = Double(arc4random_uniform(10000)) let y: Double = Double(arc4random_uniform(10000))原创 2020-12-12 20:34:36 · 249 阅读 · 0 评论 -
Swift之单例模式
前言:单例特点:单例实例在整个应用程序生命周期期间必须只有一个,例如UIApplication或NSNotification;单例的构造器必须为private;单例实例必须为线程安全的。单例优点:调用单例实例时避免了不必要的开销;简化管理和使用流程。代码:class CaculateRectangleArea{ static let caculateRectangleArea: CaculateRectangleArea = CaculateRectangleArea();原创 2020-12-08 22:27:03 · 1103 阅读 · 0 评论 -
Swift 基本数据类型之间互相转换
String转Intlet str: String = "10"let a = Int(str)String转Doublelet str: String = "10"let a = Double(str)Int转Stringlet a: Int = 20let str = String(a)Int转Doublelet a: Int = 20let b = Double(a)原创 2020-11-23 19:38:46 · 1195 阅读 · 0 评论 -
Swift强制转型 浅析as关键字
前言:在其它OOP语言中也有类似的强制转型机制,例如Java中可以通过前后类型不一致(父类与子类)来达到向上转型和向下转型。在Swift中可以通过as 关键字来达到向上兼容和向下转换的目的。asXcode通常会建议我们使用as!来转型。as!类与其子类之间的强制转换。与隐式未包装选项一样,此类型转换可能不安全,我们应该仅使用as!当确定它不可能出错的时候。在处理来自UIKit和其他iOS框架的对象时,通常需要使用这种类型转换。举例:在UICollectionView控件的创建时,我们通常需要实原创 2020-11-23 19:22:18 · 781 阅读 · 0 评论 -
工厂模式 Swift简单实现
关于工厂模式的说明,请移步至https://blog.csdn.net/kicinio/article/details/109672005代码如下:import Foundationprotocol Flight { func fire() -> Void}class J10: Flight{ func fire() { print("J10 Fire.") }}class J11: Flight{ func fire(){原创 2020-11-13 16:40:28 · 219 阅读 · 0 评论 -
Swift数据结构之Dijkstra
代码实现(包括图,边,点)public class DijkstraEdge<T:Equatable & Hashable>:Equatable { public var from:DijkstraNode<T> public var to:DijkstraNode<T> public var weight:Double public init(weight:Double, from:DijkstraNode<T>原创 2020-11-07 19:57:49 · 153 阅读 · 0 评论 -
Swift数据结构之队列
代码实现:public struct Queue<T> { private var data = [T]() public init() {} public mutating func dequeue() -> T? { return data.removeFirst() } public func peek() -> T? { return data.first } p原创 2020-11-06 21:06:00 · 539 阅读 · 0 评论 -
Swift数据结构之栈
代码实现:public struct Stack<T> { private var elements = [T]() public init() {} // To pop an element public mutating func pop() -> T? { return self.elements.popLast() } // To push an element into satck.原创 2020-11-06 20:47:05 · 506 阅读 · 2 评论 -
Swift中init()方法的理解(构造器)
前言初学者在学习Swift语言时可能对于方法/函数里面的“构造方法”/“构造函数”有困惑。实际上不仅仅是Swift,包括例如Java,C#等OOP语言而言,其都具备构造方法且作用大体相同:都是为一个类赋予初始值。示例代码下面两种情形分为在编码时无init方法和具备init方法1.无init方法class Student{ var name: String? var age: Int?}对于这种情况而言,该类在实例化时,编译器仅为其各个变量提供内存地址,但内存地址而言里面却空空原创 2020-11-06 20:35:22 · 1009 阅读 · 0 评论