-
Swift Concurrency 2
目录 async / await Task 与 TaskGroup actor 与 MainActorasync / await一、基本用法async:声明异步函数。表示该函数可能会挂起执行await:调用异步函数,等待结果。创建两个异步函数,用来模拟数据请求//模拟请求数据func fetchData () async -> String { // 模拟异步延迟 print("---发起了fetchData") try? await Task.sleep(n...…
-
Swift Concurrency 1
目录 Swift Concurrency 是什么 为什么要有 Swift Concurrency 举个小例子Swift Concurrency 是什么Swift Concurrency 是 Swift 从 5.5 开始引入的一套现代化并发模型,让我们用更安全、更直观的方式来写并发代码。它的核心有三部分:async/await 用来写异步函数和等待异步结果。 让异步代码像同步代码一样清晰。Task & TaskGroupTask 用来创建并发任务。 TaskGr...…
-
Swift混编4
-The Swift Programming Language (6) -Swift目录 行者常至,为者常成!…
-
Swift混编3
-参考文章1:从预编译的角度理解Swift与Objective-C及混编机制目录 简图 在同一个target内的互相调用 在不同的target内的互相调用 总结简图在同一个target内的互相调用我们知道,每个文件的编译是独立的。能够互相调用,就是在编译阶段能够找到对方声明的接口。一、在 App target 内的互相调用我们创建一个Object-C的工程:InvocationDemo1、OC调用OC 通过头文件来知道对方的声明接口2、OC调用Swift 在 App tar...…
-
Swift混编2
-参考文章1:从预编译的角度理解Swift与Objective-C及混编机制目录 modulemap swiftmodule 总结modulemap一、介绍modulemap 是为解决 Objective-C 头文件引用问题引入的。解决了头文件的重复编译问题(常规引用头文件会重复编译),并且使头文件可以按需引入(PCH是全量引入)。 将非模块化的 Objective-C 代码转化为模块化,使其可以以模块的方式被其它(OC或Swift)模块导入。 说明:modu...…
-
Swift混编1
-从预编译的角度理解Swift与Objective-C及混编机制目录 预编译知识指北 PCH(PreCompiled Header)是一把双刃剑 Clang Module 的来临! 头文件的搜索 互相调用总结 XCFramework内三个文件预编译知识指北#include 是对头文件的简单复制 #import 也是对头文件的复制,但保证不会重复粘贴 在预编译阶段会对#import引入的头文件进行替换(递归替换) 这种引入方式存在的问题:最主要的问...…
-
新项目去除storyboard
目录 介绍如何去除删除 Main.storyboard 文件 删除 info 下面的 Storyboard Name 条目 再删除下面的条目 代码创建窗口和根视图func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) { guard let windowScene = (scene as?...…
-
Mirror反射
目录 什么是Mirror反射 有什么用什么是Mirror反射Swift 的反射机制是通过 Mirror 类型实现的。Mirror 提供了一种在运行时检查和操作对象结构的方式,允许你查看对象的类型、属性和值。虽然 Swift 是一种静态类型语言,但反射提供了一些动态特性,使你能够在运行时检查对象的详细信息。import Foundationclass Person { var name: String var age: Int init(name: String, ag...…
-
Swift是静态语言
目录 语言的静态特性 语言的动态特性 总结Swift 是一种静态语言,但它也包含了一些动态语言的特性。以下是对 Swift 静态性和动态性的详细解释语言的静态特性编译时类型检查Swift 是强类型语言,编译时会进行严格的类型检查,确保类型安全。静态方法分派大部分方法调用在编译时就已经确定,这有助于提高运行时性能。语言的动态特性运行时类型检查Swift 提供 Any 和 AnyObject 类型来表示任意类型的值,允许一些运行时类型检查。动态方法分派通过 @objc 和 NSObjec...…
-
22、单元测试
目录 单元测试单元测试swift unitTest(单元测试) Failed to import bridging header因为项目是通过OC和Swift混合开发的,所以说避免不了新建bridge-header文件,bridge-header文件主要作用就是让Swift文件可以访问到OC文件。同时,项目的第三方库我是用cocoapods进行管理的,在进行UnitTest的时候,编译报错,错误信息为“Failed to import bridging header”。出现这个问题的原因...…
-
21、响应式编程
目录 响应式编程 代码响应式编程一、响应式编程响应式编程(Reactive Programming,简称RP) 也是一种编程范式,于1997年提出,可以简化异步编程,提供更优雅的数据绑定 一般与函数式融合在一起,所以也会叫做:函数响应式编程(Functional Reactive Programming,简称FRP)比较著名的、成熟的响应式框架ReactiveCocoa 简称RAC,有Objective-C、Swift版本 官网: http://rea...…
-
20、面向协议编程
目录 面向协议编程 利用扩展添加前缀效果 利用协议添加前缀效果 利用协议实现类型判断面向协议编程一、面向协议面向协议编程(Protocol Oriented Programming,简称POP) 是Swift的一种编程范式, Apple于2015年WWDC提出 在Swift的标准库中,能见到大量POP的影子同时,Swift也是一门面向对象的编程语言(Object Oriented Programming,简称OOP) 在Swift开发中,OOP和POP是相辅相成的,任何一方并不能...…
-
19_02、函数式编程(二)
目录 函数式编程(一) 函数式编程(二) 高阶函数(Higher-Order Function) 函子(Functor) 单子(Monad)函数式编程(一)// 一、函数式编程func funtionalProgramming() -> Void { /** 函数式编程(Funtional Programming) 一、函数式编程(Funtional Programming,简称FP)是一种编程范式,也就是如何编写程序的方法论 ...…
-
19_01、函数式编程(一)
目录 Array的使用 lazy的优化 Optional的map和flatMap(一) Optional的map和flatMap(二) Optional的map和flatMap(三)Array的使用//一、Array的使用func arrayUse() -> Void { //1、 Array的常见操作 - map(映射) do{ print("------1-----") let intArr = [1,2,3,4]...…
-
18_03、OC到Swift(三)
目录 多线程开发 – 异步 多线程开发 – 加锁]多线程开发 – 加锁/** 多线程开发 – once dispatch_once在Swift中已被废弃, 取而代之 可以用 类型属性 或者 全局变量\常量(只初始化一次) 默认自带 lazy + dispatch_once 效果 *///全局常量,只初始化一次,只赋值一次,只在使用时才初始化(lazy)fileprivate let initTask2: Void = { print("initTask2---------")...…
-
18_02、OC到Swift(二)
目录 选择器的用法 string 的用法 可选协议 dynamic kvc kvo 关联对象(Associated Object) 资源名管理]选择器的用法//一、选择器的用法func selectorUse() -> Void { /** 选择器(Selector) n wift中依然可以使用选择器,使用#selector(name)定义一个选择器 必须是被@objcMembers或@objc修饰的方法才可以定义选择器 */ ...…
-
18_01、OC到Swift(一)
目录 mark标记 条件编译 系统版本检测 swift调用oc oc调用Swiftmark标记/// 一、mark标记func markUse() -> Void { //MARK: - test方法 //MARK: test1 //MARK: test1 //MARK: - 测试方法 //TODO:标记未完成任务 //FIXME:待修复问题 //警告 可用于标记未完成 #warning("undo") ...…
-
17_02、字面量、模式匹配(二)
目录 模式匹配 通配符模式 标识符模式 值绑定模式 元组模式 枚举Case模式 可选模式 类型转换模式 表达式模式 where模式匹配//一、模式匹配func patternUse() -> Void { /** 什么是模式? 模式是用于匹配的规则,比如switch的case、捕捉错误的catch、if\guard\while\for语句的条件等 Swift中的模式有 通配符模式(Wildcard Pattern) ...…
-
17_01、字面量、模式匹配(一)
目录 字面量 字面量协议 字面量协议应用字面量//一、字面量func literalUse() -> Void { //1、字面量 do{ print("--------1------") //代码中的10、false、"Jack"就是字面量 var age = 10 var isRed = false var name = "Jack" } //2、字面量 do...…
-
16、内存访问冲突、指针
目录 do的用法 内存访问冲突 指针的应用示例 获得指针 创建指针 交换指针类型do的用法//一、do的用法func doUse() -> Void { //局部作用域 do{ let a:Int = 10 let b:Int = 11 print(a,b) } //局部作用域 do{ let a:Int = 10 let b:Int = 11 pri...…