最新消息:20210816 当前crifan.com域名已被污染,为防止失联,请关注(页面右下角的)公众号

[记录]学习Swift语言基础知识和语法

iOS crifan 2089浏览 0评论

The Swift Programming Language中文版_The Swift Programming Language中文教程_The Swift Programming Language开发中文手册[PDF]下载-极客学院Wiki

-》

离线下载:

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]) -&gt; (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) -&gt; Int in
    let result = 3 * number
    return result
})
</code>

可以理解为:

<code>{
    (var1:SomeType) -&gt; 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语言基础知识和语法

发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
83 queries in 0.173 seconds, using 22.16MB memory