Swift项目 -- 问题小集

2016-08-25  本文已影响66人  叫我困兽

前一段时间工作比较清闲,就看了《The Swift Programming Language 中文版》(英语不好,中文版将就吧)。
第一次正式的从头开始看,过了一遍。觉得还是项目实践才能快速上手,就想着复刻公司的项目。因为接口什么的都有,也不用自己想到哪做到哪(如果保密比较严,最好跟领导说一下)。


在此记录遇到的问题:

1.为什么不再需要导入.h文件了?
首先是没有了😂然后我去搜了一下,然而没有搜到。问个大神,他给我发了段代码 代码大家自己敲吧

然后我似乎明白了什么!OC里面导入.h文件,会根据这个文件,把.h的接口、数据结构和属性的声明暴露出来。Swfit也是一样的,但是需要你自己写命名空间了,对于NSClassFromString方法。


2.Swift没有宏定义了
The Apple docs state that:Declare simple macros as global constants, and translated complex macros into functions.(苹果的文档指出:声明简单的宏作为全局常量,并翻译复杂的宏成功能。)
因为不需要了呗,Swift可能就没有引进预处理指令的。所以你只能使用全局函数或者全局变量来替代宏定义了。宏从工程角度说带来方便的同时也会引入不可预知的风险。
广告时间😄 Swift常用全局函数及者全局变量
参考:Macros in Swift?为什么swift不支持宏定义?


以下出现swift3.0的变动会比较多,留作记录😀有需要请自取

3.使用xib自定义View
在swift2.3中,创建xib视图代码为

    func loadViewFromNib() -> UIView {
        let bundle = NSBundle(forClass: self.dynamicType)
        let nib = UINib(nibName: String(self.dynamicType), bundle: bundle)
        let view = nib.instantiateWithOwner(self, options: nil)[0] as! UIView
        return view
    }

但在swift3.0中,OC的身影越来越少,很多类型都不在使用NS系列,改为

    func loadViewFromNib() -> UIView {
        let bundle = Bundle(for: type(of: self))
        let nib = UINib(nibName: String(describing: type(of: self)), bundle: bundle)
        let view = nib.instantiate(withOwner: self, options: nil)[0] as! UIView
        return view
    }

这里还要注意的是,在获取对象类型时,object.dynamicType方法改为了type(of: object)。再根据类名创建方法时,也最好使用type(of: object)以避免输入的错误带来的创建失败问题。

上一篇下一篇

猜你喜欢

热点阅读