lufei's Studio.

lufei's Studio.

纸上得来终觉浅,绝知此事要躬行。

2021年终小总结
2021的工作时光终于要全部结束啦,乘着我还记得,做一下小小的总结。 今年自学了 flutter,虽然我在学习过程中,不断地吐槽它,但不可否认,在很多场景下,flutter 都是跨平台框架中的佼佼者,是一个不可错过,值得学习的好框架,于是我决定在开春后,第一次把这个有名的跨平台框架引入生产项目中了,虽然可能会有坎坷,但我很期待,应该是会有一段很不错的时光,激动ing~ 间断地在学习前端知识,对于 react 和 vue,也有着浓厚的兴趣,不过前端技术的更迭实在过快,各种设计和架构层出不穷,想要学好,还有很长的路要走,除此之外,我又把我的小程序,由里到外折腾了一遍,几乎变成了一个崭新的小程...
iOS 优雅的实现数据绑定
前言如果你想设计一个 MVVM 架构的新项目,那么如何实现数据绑定,是一个需要关心的问题。 当然,如果你非要使用 Delegate 或者 Notification 去做的话,其实也没问题,但我想,这应该都不算优雅的方式。 数据绑定的成熟方案,有比如 RXSwift,KVO 等等,感兴趣的朋友可以去搜索一下,但是,假如你在使用 Swift,事实上有一个现成的被遗忘的方案,那就是 Swift 中无所不能的闭包。 实现说再多也没用,直接上代码,实现一个 Box 1234567891011121314151617181920212223242526final class Box<T>...
iOS 关于内购
内购漏单有一说一,苹果内购真的很坑。 苹果内购和国内大部分第三方支付的最大不同,就是它是由客户端去驱动服务器或本地校验支付结果,而移动端网络情况复杂,再加上苹果的机制本身就设计的很不方便开发者,还有苹果的 iap 服务器不在国内,导致很多时候,iap 的校验延迟或很久都不能成功. 关于 iap 服务器,可以在下面这里查询状态: system-status 上面的几个原因,造成了苹果内购的漏单问题。 几种内购处理方案 先服务器创建订单,再本地或服务器校验 先本地或服务器校验,再服务器创建订单 上面这两种方案,下面还可细分两种方案: 依赖 iap 的机制 不依赖 iap 的机制 ...
iOS 关于UINavigationBarDelegate
UINavigationBarDelegate 的一个问题为了能够在恰当的时候拦截所需要的控制器的返回事件,实现 UINavigationBarDelegate 是一个还不错的办法. 比如就像这位开发者写的这样:UIViewController-BackButtonHandler 因为我的项目大部分都是用的 swift,于是我就用 swift 简单实现了一下 UINavigationBarDelegate,直到昨天,在 iOS13 以下出现了难以置信的 bug, 具体的 bug 表现:在 iOS13 以上一切正常,在 iOS13 以下会导致系统的返回按钮失效。 真是个可怕的 bug。 解...
iOS 关于 1px 的小问题
UICollectionView 1px 缝隙问题有时候会发现满屏幕等分 UICollectionView 的时候,一些机型会出现 1px 的缝隙,这个问题,让我很困惑。 分割线到底多高有时候,设计图上标注的 1px 的分割线,展现出来的效果却总是差强人意,于是聪明的开发者默默改成了 0.5,效果还不错,但也还是心存困惑。 iOS 里的尺寸困惑积压过多,不得不查查资料,希望能彻底解决这个问题。 px,pt,ppi px:屏幕最小单位 pixel,也称为像素,像素和我们平常说的英寸厘米这些单位不同,它是没有固定大小的,一平方米的面积上可以放一千个像素也可以放一万个像素,我们只需要记住像素是...
swift 类型擦除
平时开发过程中,可能有时候需要把拥有关联类型的协议对象作为属性的时候,这种情况下,最好的方案是使用「类型擦除」,平时我们在 swift 的官方源码中,也会看到类似 AnySequence 等等一些比较特殊的类型或者结构体,这其实就是官方提供的对类型擦除的运用。 参考官方实现,我们可以试试实现自己的协议的类型擦除中间类。 下面就是我尝试实现的代码: 123456789101112131415161718192021222324252627protocol NJState { associatedtype StateType func add(_ item: State...
Bohemian Rhapsody
Bohemian Rhapsody from QueenIs this the real life Is this just fantasty Caught in a landslide No escape from reality open your eyes, look up to the skies and see I’m just a poor boy I need no sympathy Because I’m easy come, easy go, Little high, little low Anyway the wind blows, doesn’t really ma...
数据结构-图(graph)
本文简单的介绍一下 图(Graph) ,总结一下,方便记忆。 若干定义 一个图由顶点(vertex)集和边(edge)集组成。简写成:G = (V, E)。 每一条 edge 就是一个点对,比如(v ,w),v,w 是顶点集 V 中的顶点。 有时,也把 edge 称为弧(arc)。 如果这个点对是有序的,那么图就是有向的(directed)。 有向的图有时也叫做有向图(digraph)。 如果 edge(v,w)属于 边集 E,那么就称顶点 v,W 邻接。 有时候,edge 还有第三种成分,称作权(weight)或值(cost)。 图的表示方法 使用一个二维数组来表示,称...
吐槽 flutter
前言由于某些原因,我竟然开始了解学习最近火热的跨平台技术 Flutter,并开始尝试改写我的项目,在改写了几个模块后,终于我忍无可忍,一定想要吐槽吐槽它。 必须承认,我目前对 flutter 的了解,也仅仅是初学者的状态,所以很多观点还很幼稚,不成熟,我的吐槽也仅仅是一个初学者的小情绪而已,对于谷歌团队的多年努力,大家还是有目共睹的。 下面我就开吐了!!! 吐槽首先就是报错信息的不明确,很多时候,报错信息我都期待能起码告诉我错误出在哪里,但是 flutter 的报错,我就遇到很多时候,根本看不出来哪儿有问题,根本说明不了任何问题,去谷歌上搜,很多时候,都提醒我也许,flutter cle...
关于 Unicode
前言如果要处理文本,Unicode 是一定要使用的,但是由于各种各样复杂的原因,导致 Unicode 的学习和使用是一件相当复杂的事情。 不过,无论如何,通过搜集资料,我还是在这里对了解到的 Unicode 的知识,做一个小小的总结。 历史首先,计算机是不能直接处理文本的,计算机只和数字打交道。为了在计算机里用数字表示文本,需要指定一个从字符到数字的映射。这个映射,被称为编码 一开始,最有名的编码字符集是 ASCII 码。ASCII 码是 7 位的,它将英文字母,数字 0-9 以及一些标点符号和控制字符映射为 0-127 这些整型。 当然,ASCII 码显然是不够用的,于是开始出现了各种...
avatar
路小飞
海内存知己,天涯若比邻!