-》
离线下载:
http://wiki.jikexueyuan.com/download/swift/pdf/
http://wiki.jikexueyuan.com/download/swift/epub/
在线阅读:
基础部分(The Basics) – The Swift Programming Language 中文版 – 极客学院Wiki
《The Swift Programming Language》中文版 – GitBook
-》
基础部分 | 《The Swift Programming Language》中文版
学习记录:
Cocoa 和 Cocoa Touch 框架
自动引用计数(Automatic Reference Counting, ARC)来简化内存管理
Swift 初见(A Swift Tour) – The Swift Programming Language 中文版 – 极客学院Wiki
1.对于
<code>let vegetable = "red pepper" switch vegetable { case "celery": print("Add some raisins and make ants on a log.") case "cucumber", "watercress": print("That would make a good tea sandwich.") case let x where x.hasSuffix("pepper"): print("Is it a spicy \(x)?") default: print("Everything tastes good in soup.") } </code>
中的
case let x where x.hasSuffix(“pepper”)
值得以后多多采用,如果用得到的话。
2.总结:Swift中两个问号的用法和好处
??的好处:
把:
<code>let someOptionalStr:String? = “new" var finalStr = “" if someOptionalStr != nil { finalStr = someOptionalStr! } else { finalStr = “default" } </code>
变成:
<code>let someOptionalStr:String? = “new" let finalStr = someOptionalStr ?? “default" </code>
即可。
3.之前
对于开区间和闭区间不了解,现在知道了:
0..<3 -》输出:0,1,2
0…3 -》输出:0,1,2,3
4.对于所表现出来的:
函数返回值,也可以巧妙的借用元祖,尤其是命了名的元祖
-》使的自己的程序也去加上返回值的命了名的元祖:
<code>func isExistedMessage(newMessage:Message, messageList:[Message]) -> (isExisted: Bool, existedMsgIdx: Int, existedMessage: Message) { var existed:Bool = false var existedMessageIdx:Int = -1 var existedMessage:Message = Message() for (curIdx, curMessage) in messageList.enumerate() { if curMessage.id == newMessage.id { existedMessageIdx = curIdx existedMessage = curMessage existed = true break } } return (existed, existedMessageIdx, existedMessage) } </code>
从而使的程序的返回值更方便的使用了
从:
<code>var isExisted = false var existedMsgIdx:Int? = nil var existedMsg:Message? = nil (isExisted, existedMsgIdx, existedMsg) = SingletonMessageManager().isExistedMessage(newMessage, messageList: self.messageList) </code>
变为:
<code>let existedTuple = SingletonMessageManager().isExistedMessage(newMessage, messageList: self.messageList) if existedTuple.isExisted { let insertedRowIndexPath = NSIndexPath(forRow: existedTuple.existedMsgIdx, inSection: 0) </code>
5.函数
函数实际上是一种特殊的闭包:它是一段能之后被调取的代码。
你可以使用{}来创建一个匿名闭包。使用in将参数和返回值类型声明与闭包函数体进行分离。
<code>numbers.map({ (number: Int) -> Int in let result = 3 * number return result }) </code>
可以理解为:
<code>{ (var1:SomeType) -> ReturnType in …. return xxx } </code>
TODO:
对象和类
在 Objective-C 和 Cocoa 中,您通过选择两个不同的类(NSString和NSMutableString)来指定该字符串是否可以被修改,Swift 中的字符串是否可以修改仅通过定义的是变量还是常量来决定,实现了多种类型可变性操作的统一。
->对应的,NS前缀的类似的东西还有很多,比如
NSAttributes
NSMutableAttributes
->还是swift简洁
String是值类型
->别处,比如函数中,调用,修改的是拷贝后的内容,不会影响原值
NSString在调用时是引用↣被调用时修改值会影响原值
someString.utf8
.utf16
.unicodeScalars
scalar.value
多行注释 支持嵌套
尽量不要使用UInt,除非你真的需要存储一个和当前平台原生字长相同的无符号整数。除了这种情况,最好使用Int,即使你要存储的值已知是非负的。统一使用Int可以提高代码的可复用性,避免不同类型数字之间的转换,并且匹配数字的类型推断,请参考类型安全和类型推断。
转载请注明:在路上 » [记录]学习Swift语言基础知识和语法