获得徽章 0
赞了这篇文章
赞了这篇文章
赞了这篇文章
赞了这篇文章
赞了这篇文章
赞了这篇文章
赞了这篇文章
赞了这篇文章
赞了这篇文章
赞了这篇文章
赞了这篇沸点
赞了这篇沸点
今日份补锅,发现一个crash,挂在了某个协议的 [self.delegate respondsToSelector:] 方法上,正觉得奇怪呢,下意识看了一眼.h文件中的声明:
一口老血喷在了屏幕上...
想起了那些历历在目的
@property (nonatomic, assign) NSString *xxx;
@property (nonatomic, strong) NSInteger count;
告诉自己淡定淡定,毕竟是那逝去的遥远的2016年的commit,都有感情了。
一口老血喷在了屏幕上...
想起了那些历历在目的
@property (nonatomic, assign) NSString *xxx;
@property (nonatomic, strong) NSInteger count;
告诉自己淡定淡定,毕竟是那逝去的遥远的2016年的commit,都有感情了。
展开
3
5
赞了这篇沸点
最近在梳理 Swift 4.2 以来的变动时,发现一个从 4.0 时代开始就被忽略的小细节,关于 Array。
为了完全与 Objective-C 划清界限,Swift 对 Array 进行彻彻底底的重构,进入 Swift 4.0以后,Swift 就将不少兼容 NSArray 的 API 移除了,这其中就包括一个使用频率非常高的 Array.index(of anObject: Any) -> Int
当你试图在敲代码时联想这个API,就会发现编译器没有任何提示,标准库里也找不到这个方法(此前一段时间里我一度认为这是编译器的 bug),但是3.0 时代遗留的代码却不会产生任何警告,甚至你还可以通过盲打来使用这个API,直到今天重新翻阅 Swift 文档才发现,这个 API 是确确实实被移除了,但为什么可以通过盲打来继续使用呢,这是因为 index(of anObject: Any) -> Int 已经「彻彻底底」变为 NSArray 专属了,当你以盲打的方式"强行"使用这个API时,编译器会自动为你的 Array 转换成 针对 NSArray 的兼容模式,实际上你调用的是 NSArray 的方法。
那 Array 难道没有提供相应的替代方法吗?当然有。在文档中我找到了这个方法: func firstIndex(of: Element) -> Int?
看着这个方法名已经很容易猜到它的作用,返回数组中最先匹配到该元素的索引值,NSArray 的内部对 index(of: ) 的实现出于性能的考虑也不外乎也是找到符合条件的第一个元素就停止寻找,直接返回索引值,所以这个方法应该就是替代方案,为了验证想法尝试了一下,果然如此
let array = ["1", "2", "3", "4", "5"]
let index = array.firstIndex(of: "3")
printLog("\(String(describing: index))")
/// print : 2
为了完全与 Objective-C 划清界限,Swift 对 Array 进行彻彻底底的重构,进入 Swift 4.0以后,Swift 就将不少兼容 NSArray 的 API 移除了,这其中就包括一个使用频率非常高的 Array.index(of anObject: Any) -> Int
当你试图在敲代码时联想这个API,就会发现编译器没有任何提示,标准库里也找不到这个方法(此前一段时间里我一度认为这是编译器的 bug),但是3.0 时代遗留的代码却不会产生任何警告,甚至你还可以通过盲打来使用这个API,直到今天重新翻阅 Swift 文档才发现,这个 API 是确确实实被移除了,但为什么可以通过盲打来继续使用呢,这是因为 index(of anObject: Any) -> Int 已经「彻彻底底」变为 NSArray 专属了,当你以盲打的方式"强行"使用这个API时,编译器会自动为你的 Array 转换成 针对 NSArray 的兼容模式,实际上你调用的是 NSArray 的方法。
那 Array 难道没有提供相应的替代方法吗?当然有。在文档中我找到了这个方法: func firstIndex(of: Element) -> Int?
看着这个方法名已经很容易猜到它的作用,返回数组中最先匹配到该元素的索引值,NSArray 的内部对 index(of: ) 的实现出于性能的考虑也不外乎也是找到符合条件的第一个元素就停止寻找,直接返回索引值,所以这个方法应该就是替代方案,为了验证想法尝试了一下,果然如此
let array = ["1", "2", "3", "4", "5"]
let index = array.firstIndex(of: "3")
printLog("\(String(describing: index))")
/// print : 2
展开
评论
10
赞了这篇沸点
赞了这篇沸点
近期的思考:技术人在开发每个细节功能的时候都该好好思考这个功能的业务kpi是什么,目的在于培养数据敏感性。
清楚地知道每一个feature在开发的时候是为了提升什么数值?是否还有其他的统计数据能够佐证这样的提升?不同数据之间分析因果关系是否还存在其他的技术驱动提升点。基于这样的理解之下就可以自己写日志统计报表去验证产品方向是否正确。
不要觉得自己是前端客户端开发报表分析与数据分析离自己很远,前端与客户端本应更接近用户交互行为转化漏斗,更能感受每个页面之间细微的交互差异带来的体验层感受变化。拿起sql来强化自己对数据的敏感性,自主的构建自己数据驱动的思维,寻找数据之间机会。
这其实就是数据驱动下的增长黑客方法论,研发驱动的增长黑客是有得天独厚的优势的!
清楚地知道每一个feature在开发的时候是为了提升什么数值?是否还有其他的统计数据能够佐证这样的提升?不同数据之间分析因果关系是否还存在其他的技术驱动提升点。基于这样的理解之下就可以自己写日志统计报表去验证产品方向是否正确。
不要觉得自己是前端客户端开发报表分析与数据分析离自己很远,前端与客户端本应更接近用户交互行为转化漏斗,更能感受每个页面之间细微的交互差异带来的体验层感受变化。拿起sql来强化自己对数据的敏感性,自主的构建自己数据驱动的思维,寻找数据之间机会。
这其实就是数据驱动下的增长黑客方法论,研发驱动的增长黑客是有得天独厚的优势的!
展开
4
11