iOS学习周报二
2015-12-18 本文已影响525人
eaa1d39d22a8
1.Swift Tips - Protocol Extension替代继承##
在面相对象编程中,经常使用基类为子类添加一些公用属性和方法。
但是继承也存在一些缺点:
a.不能重写存储型属性。
b.只能通过类继承而不支持结构体、枚举等类型的继承。
Swift是面相协议的编程语言,在2.0中引入了协议扩展Protocol Extension。Protocol可以用来定义类、结构体、枚举等需要去遵循的一些属性和方法,顾名思义Protocol只是用来定义一些需要遵循的协议,但不提供默认的实现方法,从而不能实现继承中基类中方法的默认实现。
而通过Protocol Extension可以为Protocol增加默认行为,同时可以为Protocol增加计算属性或者方法的默认实现(听起来有些拗口,但其实很好理解)。
注意:Protocol Extension不能用来扩展存储属性,Protocol Extension中的扩展方法都需要默认实现。
如下面的例子:
定义了一个协议ProgrammerProtocol,用来表示一个开发工程师需要遵循的协议。
定义extension ProgrammerProtocol来扩展协议,增加helloworld方法,表明每个开发工程师都会写helloworld。
定义iOSProgrammer,遵循ProgrammerProtocol协议,表示iOS开发工程师。
定义AndroidProgrammer,遵循ProgrammerProtocol协议,表示Android开发工程师。
// 协议
protocol ProgrammerProtocol {
var name:String{get set} //名字
func skilledLanguage() -> String //擅长的开发语言
}
// 协议的扩展
extension ProgrammerProtocol {
func helloworld(){
print("helloworld")
}
}
// iOSProgrammer
struct iOSProgrammer:ProgrammerProtocol {
var name = "iOS开发工程师"
func skilledLanguage() ->String {
return "skilledLanguage"
}
}
// iOSProgrammer
struct AndroidProgrammer:ProgrammerProtocol {
var name = "Android开发工程师"
func skilledLanguage() ->String {
return "Java"
}
}```
##2.开源项目##
- ####R.swift ####
[Github链接]()、[介绍链接](http://www.cocoachina.com/swift/20151202/14525.html)
一种更优雅安全的方式调用资源文件(nibs,stotyboards,images,Reusable cells,Custom fonts),支持自动填充资源名称及强类型(在编译期发现某一资源文件是否存在)。
在Swift调用资源文件,例如:调用UIImage的初始化方法 public init?(named name: String),经常遇到以下问题:
a.字符串经常写错。
b.删除了某一资源文件需要全局搜索某一资源文件是否被某些地方调用,用这个库可以很好地解决这两个问题。
R.swift很好地解决以上两个问题,对资源文件进行管理,支持资源自动匹配,同时对不存在的资源给予错误警告。
注:该组件的原理看是否可以应用于App换肤当中。
- ####Swift编码规范####
[Github链接](https://github.com/github/swift-style-guide),Swift是强类型,编译期安全的语言,关于Swift编码规范系统总结的文章比较少(毕竟Swift不断在更新中...),好的规范可以避免很多坑。总结下里面讲到的几个规范:
1.能用let尽量用let,而不用var(3.0版本中对if let等语言有了新的更新)。
2.在方法中尽早return,并推荐使用guard。
3.避免对optional类型强解包,用if let绑定optional类型或者使用可选链? 。
4.如果value可能为空,尽量使用optional类型而不是非空类型。
5.对于只读的属性或者subscripts,可以使用隐式的getter方法。
6.对于顶层的函数、类型、变量,需要指定权限控制类型public,private,internal(如果是隐式则可省略)。
7.指定一个value,将冒号和value连在一起,然后之后加一个空格。 let value: String。
8.需要时才写self,类中self可省略。(Swift 3.0说不定有改回了self.xxx的调用方式)。
9.首选结构体而非class,尽量使用协议而非继承。
10.参数化的类型,方法中可以省略类型参数,如范型Atype<T>,可直接用Atype。
11.操作符两边留空格。
12.空格: 使用Tabs空格而非space;文件结束时留空一行;用足够的空行把代码分割成合理的块; 不要在一行结尾前留空白。
13.使用可选链式调用代替强制展开。
- ####Swift编码规范开源插件SwiftLint####
[SwiftLint](https://github.com/realm/SwiftLint)可以看作是一个Xcode插件,基于Sourcekit & Clang AST的应用([Sourcekit](http://www.jpsim.com/uncovering-sourcekit/ ) & [Clang AST](http://clang.llvm.org/docs/IntroductionToTheClangAST.html)更多介绍),通过语法规范检查,可以在编译器给不规范的Swift代码给出warning。
**基于Sourcekit & Clang AST更多应用**
[jazzy](https://github.com/realm/jazzy) : 支持解析Swift & Objective-C源码及混编,自动生成和苹果官方API文档相似帮助文档,默认支持Public API,同时也支持Private & Internal
[SwiftEdit](https://github.com/jpsim/SwiftEdit) : Swift源码编辑器Demo,支持Swift语法高亮。
[SourceKitten](https://github.com/jpsim/sourcekitten) : 与sourcekitd.framework交互的封装库,支持解析Swift AST。
##其它##
- IBM推[Swift Sandbox](http://swiftsandbox.io/)网页工具, 可直接Web端编写&Linux服务器编译Swift源码。IBM看来完全拥抱苹果了啊(之前死对头),继IBM采购Mac作为办公电脑后(弃用联想),IBM称将进一步拥抱Swift开源,同时加强与苹果的合作。
- [iCloud 和 OS X 将深度集成 Swift](http://www.cocoachina.com/apple/20151216/14723.html)
苹果高级工程副总裁表示,苹果已经开始将部分核心软件转换成 Swift,而不是仅仅支持第三方应用。iCloud 团队正在正在全面拥抱 Swift 编程语言,在 OS X El Capitan 系统中 Dock 和窗口管理功能已经完全采用 Swift。苹果认为,在未来20年编程中,Swift 将成为非常重要的语言。
- [Swift进阶书籍推荐](https://www.objc.io/books/advanced-swift)