泛型代码允许你编写灵活,可以重用适用于任何类型的函数和类型。
大部分的Swift标准库都是用泛型代码编写。Array和Dictionary事实上都是泛型集合。你可以创建Int值的数组,或者String值的数组,以及其他swift类型的数组。Dictionary也是类似的。

文件出现 ^M 问题

^M 是回车符,他是源于 DOS/Windows 的,但是在 Unix 的系统中这样的符号在执行的时候会报错,在使用 vim 查看文件的时候会直接看到^M 而不是换行。

想替换掉^M,换成\r或者\n, 千万不要直接打上符号^M 进行替换,^M 这个符号要使用 ctrl+v & ctrl+m 生成,在 vim 中使用

:%s/^M/\r/g

进行替换所有回车符。

Vim是非常强大的文本编辑器,熟练使用vim会给使用linux带来很大帮助,现在很多流行的编辑器都以插件的形式支持vim编辑模式,也从另一面说明vim非常的流行。

使用 Vim 有很长一段时间了,感觉就是越熟悉越好用,刚开始用还是比较痛苦的,所以我把一些常用的命令记下来,有了下面这些命令,使用起 vim 就会更得心应手了。

  • 删除
    dd: 删除整行。
    dt+"字符": 删除当前字符到指定字符,但不包含自定字符。
    df+"字符": 删除当前字符到指定字符,且包含自定字符。
    di+"括号或者双引号,单引号,方括号等": 删除当前的成对的括号内的全部字符,不包括括号。
    da+"括号或者双引号,单引号,方括号等": 删除当前的成对的括号内的全部字符,包括括号。
    cw: 删除单词并切换为 insert 模式。
    ss: 删除当前字符并切换为 insert 模式。

首先,贴上这个库的源码地址:https://github.com/MellongLau/LiteAutoLayout

这个库也写了好长一段时间了,由于最近忙,一直都没时间把它更新好放上来,特别是文档,拖了这么久总算是补全了一点了。至于好不好用,那就见仁见智了,我之前比较习惯用IB拖auto layout的约束,也是根据IB的使用概念来实现的这个库,下面也有提到这一点,所以,个人认为,习惯使用IB来布局的同学应该会比较容易上手和习惯使用吧。

第一步,先要检测Facebook是否安装,如果安装就直接跳转到app里面指定的用户主页,否则直接用浏览器打开指定的用户主页网页地址。

类,结构体和枚举都可以定义下标,使用下标可以快速访问集合,列表或者序列的数据成员元素。可以使用someArray[index]来访问Array, 使用someDictionary[key]来访问Dictionary。

一个类型可以定义多个下标。

定义一个get set的下标:

subscript(index: Int) -> Int {
    get {
        // return an appropriate subscript value here
    }
    set(newValue) {
        // perform a suitable setting action here
    }
}

这篇文章源于群友的一个问题:如何把**『注:此商品只能整件(12的倍数发货),已选1袋,还差11袋』**这段文字中的数字使用红色在 UILabel 中显示?

大概思路是:我们可以使用UILabelattribute string 属性,通过正则表达式匹配获取数字的范围,然后添加对应的 attribute。

枚举在编程中很多时候要用到,在 Swift 中,枚举具有更多的特性。

枚举语法

使用关键字 enum 定义一个枚举

enum SomeEnumeration {
    // enumeration definition goes here
}

例如,指南针有四个方向:

enum CompassPoint {
    case north
    case south
    case east
    case west
}

这里跟 c 和 objective-c 不一样的是,Swift 的枚举成员在创建的时候没有给予默认的整型值。所以上面代码中的东南西北并不是0到3,相反,不同的枚举类型本身就是完全成熟的值,具有明确定义的CompassPoint类型。

最近运行pod setup出现以下问题:

remote: Compressing objects: 100% (34/34), done.
error: RPC failed; curl 56 SSLRead() return error -3613.00 KiB/s
fatal: The remote end hung up unexpectedly
fatal: early EOF
fatal: index-pack failed

扩展可以为类,结构体,枚举和协议添加新的功能。包括可以对没有源码访问权限的类型进行扩展。扩展和 Objective-C 分类 的概念类似。(和 Objective-C 的分类不一样的是,Swift 扩展没有名称)。

在 Swift 中,扩展可以做到:

  • 添加计算的实例属性和计算的类型属性
  • 定义实例方法和类型方法
  • 提供新的初始化器
  • 定义下标
  • 定义并使用新的嵌套类型
  • 使现有类型符合协议

值得注意的是:扩展可以为类型添加功能,但是不可以重写现有的功能。