摘要:/// 自定义通知枚举类型 enum JYNotification: String { ///刷新员工列表 case refreshStaffList var stringValue: String { return "JY" + rawValue } /// 通知名称 var notificati
阅读全文
摘要:最近在Swift项目实践中,用到了系统的一些权限请求,如定位、相机、相册、日历.....,为了更方便的查询各种权限状态以及使用这些功能,我简单的整理了一些常用的系统权限的状态以及授权。 特别说明:在使用这些功能时,需要在info.plist中添加对应的描述,否则将导致项目崩溃,在添加定位权限描述以及
阅读全文
摘要:前言 代码风格可能是一个有争议的话题,并且在开发人员之间引发一些激烈的讨论。使用工具强制执行一套代码风格规则对于避免一些争论,以及确保在整个项目中保持代码风格的一致性非常有帮助。SwiftLint 可以很容易的整合进 Xcode 项目中,以便在编译时将代码风格冲突标记为警告或者错误。 使用 Xcod
阅读全文
摘要:理解Property Wrappers 为了更好地了解属性包装器,让我们举一个例子来看一下它们可以解决哪些问题。 假设我们要向我们的app添加一种日志记录功能。 每次属性更改时,我们都会将其新值打印到Xcode控制台。 这样追踪错误或追踪数据流时非常有用。 实现此目的的直接方法是覆盖setter:
阅读全文
摘要:如果对C++有了解的话,理解运算符重载(Operator Overload)就很简单。OC不支持运算符重载,但Swift支持。 一、运算符重载 类、结构体、枚举可以为现有的运算符提供自定义的实现,这个操作叫做运算符重载。 正常加法运算: let v1 = 10 let v2 = 20 let v3
阅读全文
摘要:一,支持条件编译: Swift支持条件编译的内容是不多的,大概就是下面这些: // 操作系统:macOS\iOS\tvOS\watchOS\Linux\Android\Windows\FreeBSD #if os(macOS) || os(iOS) // CPU架构:i386\x86_64\arm\
阅读全文
摘要:stride函数,为可变步长类型值的序列 from to 其中from to,最后一个值将会小(大)于to的值 示例一: for index in stride(from:0, to:3, by:1) { print(index) } // print 0, 1, 2 示例二: for index
阅读全文
摘要:Swift 集合类型 Swift 提供了三种主要的集合类型,称为数组、集合和字典,用于存储值的集合。 数组是有序的值集合 集合是唯一值的无序集合 字典是键值关联的无序集合 Swift 中的数组、集合和字典必须明确其中保存的键和值类型,这样就可以避免插入一个错误数据类型的值。同理,对于获取到的值你也可
阅读全文
摘要:一,概述 所谓的 内置函数 是指无需引入任何模块(比如说Fundation等)即可以直接使用的函数。 二,常规使用 1.断言 assert,参数如果为ture则继续,否则抛出异常 let number = 3 /*第一个参数为判断条件,第二各参数为条件不满足时的打印信息*/ assert(numbe
阅读全文
摘要:一,包含高阶函数 contains(element:) 平时我们经常会用到contains(element:)来判断集合中是否包含某一元素(element需要遵循Equatable协议的): let sayHello:String = "Hello world" sayHello.contains(
阅读全文
摘要:初探高阶函数 在 Swift 中,高阶函数一共有下面几个: map:对给定数组每个元素,执行闭包中的映射,将映射结果放置在数组中返回。 flatMap:对给定数组的每个元素,执行闭包中的映射,对映射结果进行合并操作,然后将合并操作后的结果放置在数组中返回。 compactMap:对给定数组的每个元素
阅读全文
摘要:一,概述 Swift摒弃了C语言式定义变量、累加变量的for-loop,用for-in取而代之,来遍历集合类型。那什么是forEach(_:)呢?forEach(_:)也是一种遍历方式。虽然都是遍历方式,但是两者还是有些许的不同的。 二,for in 与 forEach for-in 不需要使用索引
阅读全文
摘要:一,存储属性 存储属性:将常量或变量值存储为实例的一部分(结构体和类都支持存储属性) 结构体和类中,变量存储属性用关键字var声明,常量存储属性用关键字let声明结构体实例赋值给常量,该实例属性不能被修改 Teacher 结构体分别定义了常量存储属性 name 和变量存储属性 age。 使用关键字
阅读全文
摘要:一、开发过程中常见的错误 常见的错误: 语法错误(编译报错) 逻辑错误(偏离预期需求) 运行时错误(可能会导致闪退,一般也叫做异常) 示例代码一: func divide (_ num1:Int, _ num2:Int) -> Int { num1 / num2 //单一表达式的时候,我们可以省略r
阅读全文
摘要:swift调用OC Swift调用OC类,必须要有桥接文件,且在桥接文件中 import OC类的.h文件。 1. 创建 "工程名称"-Bridging-Header.h文件 创建新的工程时会自动提示创建桥接文件SwiftTestProject(工程名称)-Bridging-Header.h, 这个
阅读全文
摘要:使用过ES6或者Dart开发的朋友应该对使用async await进行异步编程比较熟悉,在iOS中,随着Xcode 13和Swift 5.5的更新,在Swift中,也可以使用async await来进行异步编程了,在这篇文章中,我结合自己的在工作中实践的经验,来总结下自己的一些开发心得。 使用回调的
阅读全文
摘要:枚举通常用于实现特定类或结构体的功能。类似的,它也可以在更加复杂的类型环境中方便的定义通用类和结构体。为实现这种功能,Swift 允许你定义内嵌类型,借此在支持类型的定义中嵌套枚举、类、或结构体。 若要在一种类型中嵌套另一种类型,在其支持类型的大括号内定义即可。可以根据需求多级嵌套数个类型。 内嵌类
阅读全文
摘要:遵守代理或者数据源的时候使用Extension 这是一个很常见的编码需求.控制器中创建了一个tableView,设置tableView的数据源与代理给控制器。 常规做法 class ViewController: UIViewController, UITableViewDataSource, UI
阅读全文
摘要:一,概述 扩展为现有的类、结构体、枚举类型、或协议添加了新功能。这也包括了为无访问权限的源代码扩展类型的能力(即所谓的逆向建模)。扩展和 Objective-C 中的分类类似。(与 Objective-C 的分类不同的是,Swift 的扩展没有名字。) Swift 中的扩展可以: 添加计算实例属性和
阅读全文
摘要:一,概述 一般我们在以下两种情况下会遇到!和?的使用 1.声明变量时 var number: Int? var str: String! 2.在对变量操作时 number?.hashValue str!.hashValue 二,用法相关解释 由于这两种情况的意义不同,所以分开进行解释: 1.声明变量
阅读全文