你一定不知道Swift源码怎么看?

    我想你一定是在开玩笑。
    源码怎么看,打开看呗!说这话的时候请收下我的轻蔑,哈哈。不过就这个问题我今天在知乎搜索了一通。不要问我为什么在知乎搜索,鬼知道知乎什么都有。
    那么,请收下我的提问:

    如何阅读Swift源码

    知乎果然没有让我失望,结果教程如下;

    如何阅读 Swift 标准库中的源码

    顺便提一下,这次搜索还让我发现了一个比较不错的swift网站,有心的同学请收下:swift.gg

    于是今天搞了下源码的编译,并了解到一个叫做 GYB 的东西,这个东西今天先放一下。源碼編譯的過程無非就是用 brew 下了一些命令行軟件,然後使用 build 腳本跑一下過程,在此也不多說。但是今天的重點當然是我們要從源碼出發搞一些事情。
    续:今天又build,发现也并没有得出什么重要的东西,只是把gyb文件生成为swift文件,其他过程不知道它经历了什么,对我想看源码没有任何作用,还跑了整整一个下午;对于只是想看代码的同学,还是用官网给出的gyb.py脚本做处理吧;
    1. hashable
    前两天写Dictionary时发现想用枚举做key,自定义一个Dictionary,value是#selector,但是在写的过程中发现说key值需要遵循hashable协议。可以看源码来理解一下。
    首先要找到Hashable文件,发现swift的标准核心库被放在 stdlib/public/core 下,有一个 Hashable.swift 文件,打开文件先是一大段的描述,大体内容就是hashable协议作用的场景,以及给出了一个小例子;

    一个Hash类型,提供了一个 hashValue 的属性,它是一个整型常量, 如果有两个相同类型的a,b,如果 a == b,那么 a.hashValue == b.hashValue;但是反过来,如果两个hash值相同,并不表示a 就一定等于 b;
    还有一点非常重要,就是在两次不同的程序执行中hash值并不保证相等,所以不要把hash值用在你的程序中;
    Hashable协议可用于struct, enum, class,它继承于 Equatable,所以遵循Hashable协议需要同时实现Hashable协议方法,以及 Equatable 协议方法;

    /// A point in an x-y coordinate system.
        struct GridPoint {
            var x: Int
            var y: Int
        }
    
         extension GridPoint: Hashable {
             var hashValue: Int {
                return x.hashValue ^ y.hashValue &* 16777619
            }
    
            static func == (lhs: GridPoint, rhs: GridPoint) -> Bool {
                return lhs.x == rhs.x && lhs.y == rhs.y
            }
        }
    
           var tappedPoints: Set = [GridPoint(x: 2, y: 3), GridPoint(x: 4, y: 
    • 0
      点赞
    • 0
      收藏
      觉得还不错? 一键收藏
    • 0
      评论
    评论
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

    当前余额3.43前往充值 >
    需支付:10.00
    成就一亿技术人!
    领取后你会自动成为博主和红包主的粉丝 规则
    hope_wisdom
    发出的红包
    实付
    使用余额支付
    点击重新获取
    扫码支付
    钱包余额 0

    抵扣说明:

    1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
    2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

    余额充值