Swift扩展数组之泛型

Reading time ~1 minute

最近在学swift,想要像OC一样,从数组删除特定元素(removeObject),swift的数组本身没有这个功能,于是便想用extension来实现,没想到却遇到了麻烦。

extension的时候,不能写Array<>,这就导致出现一个问题,因为需要用===比较是否为同一个元素,但是只有AnyObject可以===,而数组元素并没有限定为AnyObject,最后几番折腾,终于在StackOverflow上面找到了解决方案:

extension Array {
    // Remove certain object in the array.
    mutating func removeObject<X: AnyObject>(obj: X) {
        for (idx, one) in enumerate(self) {
            if one as X === obj {
                self.removeAtIndex(idx)
                break
            }
        }
    }
}

要注意的是,其中的one as X不能写作one as AnyObject,否则会得到如下编译错误:

Cannot downcast from 'T' to non-@objc protocol type 'AnyObject'

然后,测试的时候,却又神奇的发现,并非只有以类为元素的数组可以使用,Int数组也可以正常removeObject。

挂载网络文件夹后网络故障时文件操作命令卡死

挂载 NFS 或者 Samba 的时候,经常会由于网络故障导致挂载好的链接断掉。此时如果尝试进行 ls、cd、df 等各种命令,只要与此目录沾上边,就会卡住。如果使用了类似 oh-my-zsh 这种配置的,只要在网络目录中,弹出命令提示符前就会直接卡住。这个时候第一反应就是...… Continue reading

路由折腾记 第四弹

Published on September 02, 2017