Swift
文章平均质量分 74
虚心学习的HZK
莫道先行早,更有先行人
展开
-
swift-04-枚举、结构体、类
swift-04-枚举、结构体、类一、枚举1、介绍enum:枚举是一种类型,可以像类和结构体一样,拥有自己的属性和方法swift中的枚举,可以提供的值类型有:字符串,字符,整型值,浮点值等。这一点不同于oc,oc中是默认整型值//定义Int类型的枚举enum CompassPoint:Int { case North case South case East case West}let stt: CompassPoint = .South//通过rawVal原创 2020-12-10 15:43:51 · 214 阅读 · 0 评论 -
Swift中通过 @property Wrapper
Swift中通过 @property Wrapper 让你的代码变的更简洁2019.12.02 update: 感谢掘友Swteefish的提醒 propertyWrapper 的正式中文名叫属性包装---下面是正文---什么是@propertyWrapper?从字面意思去理解 property Wrapper 就是属性包裹器(我初二英语水平硬翻,写的时候国内好像还没有一个统一的叫法。有知道学名的同学麻烦提醒下我谢啦~)。它的作用对象是属性其主旨就是:通过property Wr...原创 2020-12-10 14:51:43 · 1069 阅读 · 0 评论 -
2020-09-07
这篇将会讨论下 Swift 中不安全的 API。标准库中提供了许多不同的结构,类型,协议,功能,属性等,其中少量被明确标记为不安全。我们没办法从接口名字上直接知道安全类型和不安全类型具体的区别是什么。实际上他们的区别在于对待无效输入时的处理实现。标准库中的大多数操作在执行之前都会完全验证其输入,因此我们可以放心地假定,我们可能犯的任何严重编码错误都将可靠地捕获并报告。“安全”和“不安全“的定义这里有一个强制展开 Optional 类型的例子:我们知道 value 一定不能是 ni转载 2020-09-09 10:03:21 · 137 阅读 · 0 评论 -
一天精通iOS Swift多线程(GCD)
一天精通iOS Swift多线程(GCD)Grand Central Dispatch简称GCD,苹果官方推荐给开发者使用的首选多线程解决方案。多线程开发涉及的细节非常多,下面我会用例子细致的讲解GCD,请一定要精读,一定要用Xcode或Playground多次运行代码去对比结果。实践出真知,练习完这篇文章,你一定会觉得精通Swift多线程原来很简单。本文前半部分,我会尽可能精简话语,降低入门门槛,随着理解的深入,后面我会循序渐进地讲详细一些。第一部分:基础篇1. 串行、并行、同步、异步原创 2020-09-03 10:25:04 · 443 阅读 · 0 评论 -
Swift基础介绍
Swift介绍Swift 是一门开发 iOS, macOS, watchOS 和 tvOS 应用的新语言。swift 是一种安全,快速和互动的编程语言。swift 支持代码预览(playgrounds),这个特性可以允许程序员在不编译和运行应用程序的前提下运行 Swift 代码并实时查看结果。Swift 通过采用现代编程模式来避免大量常见编程错误: 变量始终在使用前初始化。 检查数组索引超出范围的错误。 检查整数是否溢出。 可选值确保明确处理 nil 值。转载 2020-08-25 14:45:22 · 916 阅读 · 0 评论 -
Swift 中的 as,as?,as! 的区别
Swift 中的 as,as?,as! 的区别在我的认知中,如果as能成功的话,说明as?和as!也一定会成功。在大多数情况下这是对的,但凡是总有例外。看到下面的代码,不知道你能不能看出问题。print(4 as Double) // print 4.0print(4 as! Double) // crash复制代码警告第一行代码成功执行,但第二行代码会有编译器⚠️,而且会造成崩溃,这是为什么呢?造成这种情况的原因就是 as 和 as? 与 as! 的执行机制不同...原创 2020-08-25 08:57:11 · 550 阅读 · 0 评论 -
十几个小知识点,让你理解OC到Swift的都有哪些转变
1、Selector@selector 是 Objective-C 时代的一个关键字,它可以将一个方法转换并赋值给一个 SEL 类型,它的表现很类似一个动态的函数指针。在 Objective-C 时 selector 非常常用,从设定target-action,到自举询问是否响应某个方法,再到指定接受通知时需要调用的方法等等,都是由 selector 来负责的。在 Objective-C 里生成一个 selector 的方法一般是这个样子的-(void) callMe { //...}转载 2020-07-11 11:31:26 · 331 阅读 · 0 评论 -
Swift - 属性观察者(willSet与didSet)
属性观察者,类似于触发器。用来监视属性的除初始化之外的属性值变化,当属性值发生改变时可以对此作出响应。有如下特点:1,不仅可以在属性值改变后触发didSet,也可以在属性值改变前触发willSet。2,给属性添加观察者必须要声明清楚属性类型,否则编译器报错。3,willSet带一个newValue的参数,表示新的属性。4,didSet带一个oldValue的参数,表示旧的属性。5,属性初始化时,willSet和didSet不会调用。只有在初始化上下文之外,当设置属性值时才会调用。6,即使是设置的原创 2020-07-11 10:43:13 · 1036 阅读 · 0 评论 -
基础Swift入门
基础Swift入门一. !??表示可选类型,如果申明属性或变量的话就是默认值为nil的意思,!表示解包,对加!的在使用 前一定要做判nil处理,一般用if let 和 guard let来判断,或者用 if a != nil 来做判断复制代码二. 闭包的使用1.闭包的表达式:{(参数)-> 返回值 in //代码}复制代码使用例子申明为变量:typealias Swiftblock = (String,Any) -> Voidvar原创 2020-07-10 14:04:58 · 457 阅读 · 0 评论 -
浅谈swift 开发部分小技巧
参考链接1、extension UIViewextension UIView { func addSubviews(_ subviews: UIView...) { subviews.forEach(addSubview) }} lazy var view1: UIView = { let view = UIView(frame: CGRect(x: 0, y: 0, width: 100, height: 200)) ..原创 2020-07-10 13:52:16 · 449 阅读 · 0 评论 -
深入理解Swift中static和class关键字
static和class作用:这两个关键字都是用来说明被修饰的属性或者方法是类型(class/struct/enum)的,而不是类型实例的。static 适用的场景(class/struct/enum)修饰存储属性 修饰计算属性 修饰类型方法struct Point { let x: Double let y: Double// 修饰存储属性 static let zero = Point(x: 0, y: 0)// 修饰计算属性 s.原创 2020-07-10 13:48:16 · 699 阅读 · 0 评论 -
iOS 之 Swinject 入门教程
Swinject Tutorial for iOS: 入门教程我们通过一个简短教程来探索 Dependency Injection (DI),主要介绍一款 Swift 语言写的框架——Swinject。在本教程中,您将通过 Swinject 探索依赖注入 (DI)。通过改进一个名为 Bitcoin Adventurer(Bitcoin 冒险家) 的 iOS 小程序来实现这一点,该程序可以显示当前比特币的价格。在阅读本教程时,您将重构应用程序,并完成单元测试。依赖注入(DI)是一种组织代码的方法,原创 2020-07-09 15:26:31 · 1442 阅读 · 1 评论 -
愛恨交織的 Optional - 操作篇
這章會講到:為什麼要有Optional 怎麼使用Optional 如何操作?和! 如果遇到一連串Optional的情況,我要不斷解開才能操作嗎?一、一切都要從nil與crash開始說起在多數的語言中,一個nil值的出現,可以輕易的讓程式產生錯誤,進而被系統強制關閉。一般使用者叫他閃退;開發者叫他崩潰。如何防止nil造成的錯誤,各式各樣的檢查早已不可或缺,但無論如何防堵,nil總是在程式運行階段 (runtime) 才會發生,無法在編譯時期 (compile ...原创 2020-07-08 16:50:07 · 451 阅读 · 0 评论 -
Swift 5.1 (16) - 错误处理
Swift 5.1 (16) - 错误处理错误的表示和抛出在Swift中,错误由符合Error协议的类型的值表示。Error是空协议,表示类型可用于错误处理。错误的处理Swift中的错误处理类似于其他语言中的异常处理,使用了try,catch和throw关键字。但是与许多其他语言(包括Objective-C)不一样的是,Swift中的错误处理不涉及展示函数调用的堆栈信息。因此throw与return语句的性能相当。使用抛出函数来传播错误抛出函数:函数声明中标记有throws关键.转载 2020-05-09 14:03:48 · 312 阅读 · 0 评论 -
关于swift:Pan手势和Tap手势之间的冲突
关于swift:Pan手势和Tap手势之间的冲突Conflict between Pan Gesture and Tap Gestures我目前正在开发使用UIGestureRecognizers的游戏。 我正在使用平移手势来移动播放器,点击手势来检测其他UI按钮的触摸。 除了这两个手势之间存在冲突之外,其他所有操作似乎都正常。 每当玩家移动时(识别出平移手势),游戏都会忽略我所有的轻击手势(一旦识别了平移手势,视图将不会识别出轻击手势)。有人可以告诉我如何使这两个手势一起工作吗? 我..原创 2020-09-22 15:55:53 · 1217 阅读 · 0 评论 -
Swift函数式编程详解
一. Array的常见操作1. map遍历数组中的元素,传入到后面的闭包里面,闭包的返回值组成新的数组,最后返回这个新数组。var arr = [1, 2, 3, 4]// [2, 4, 6, 8]var arr2 = arr.map { $0 * 2 } //重新映射也可以传入一个函数,如下:func double(_ i: Int) -> Int { i * 2 }var arr = [1, 2, 3, 4]// [2, 4, 6, 8]print(..转载 2020-09-11 10:06:28 · 690 阅读 · 0 评论 -
Swift数组进阶函数
WHATMap,Filter,Reduce是什么?Swift的标准数组支持三个高阶函数:map,filter和reduce.是OC中没有实现的方法。 map:map方法作用是把数组[T]通过闭包函数把每一个数组中的元素变成U类型的值,最后组成数组[U]。定义如下:func map(transform: (T) -> U) -> [U] filter就是筛选的功能,参数是一个用来判断是否筛除的筛选闭包,根据闭包函数返回的Bool值来过滤值。为True则加入到结果数组中。定义如原创 2020-09-10 16:15:46 · 264 阅读 · 0 评论