Swift语法备注

本文详细介绍了Swift语言中的Optional类型和闭包的概念及用法。Optional类型用于处理值可能缺失的情况,通过?和!操作符实现封装与解封装。闭包则是可传递和使用的功能性自包含模块。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

The Swift Programming Language 中文版:http://wiki.jikexueyuan.com/project/swift/chapter1/02_a_swift_tour.html

一、Optional类型

主要思想:Optional类型就是在基础类型上包装了一层

主要符号:?和!(?表示把基础类型封装成Optional类型,即封包;!表示把Optional类型转成基础类型,即解包

学习参考文章:http://www.cocoachina.com/industry/20140605/8687.html

重点:

1、声明成Optional的变量在调用函数方法时必须在变量末尾加上?,否则报错

2、!的用在声明的时候表示变量自动解包变成基础类型,不需要在变量后加上!

实例一:Optional类型

var stringValue : String? = "ss"

let hashValue = stringValue?.hashValue //4799450059484797865

let hashValue2 = stringValue!.hashValue //4799450059484797865

//let hashValue3 = stringValue.hashValue //报错,看重点第一条

print(stringValue) //"Optional("ss")"

print(stringValue!) //"ss"

//print(stringValue?) //报错

print(stringValue?.hashValue) //"Optional(4799450059484797865)"

实例二:Optional类型自动解包

var stringValue2 : String! = "ss2"

let hashValue3 = stringValue2?.hashValue //4799450059734628306

let hashValue4 = stringValue2!.hashValue //4799450059734628306

let hashValue5 = stringValue2.hashValue //4799450059734628306

print(stringValue2) //"ss2"

print(stringValue2!) //"ss2"

//print(stringValue2?) //报错

print(stringValue2?.hashValue) //"Optional(4799450059734628306)"

二、闭包

主要思想:闭包是功能性自包含模块,可以在代码中被传递和使用。 Swift 中的闭包与 C 和 Objective-C中的 blocks 以及其他一些编程语言中的 lambdas 比较相似。可以使用{}来创建一个匿名闭包通俗一点就是一段代码

主要符号:{}

学习参考文章:http://www.tuicool.com/articles/faYbmy

重点:

1、函数也是闭包

2、函数可以当成变量来使用,即可以把一个函数赋值给变量

var numbers = [2019712]

实例一:函数的返回值是另一个函数

func intToString() ->(Int -> String){

    func string(number : Int) ->String{

        return String(number)

    }

    return string

}

var firstFunc = intToString() //把函数声明成了一个变量

firstFunc(6)

说明:->(Int -> String)表示函数的返回类型是(Int -> String),(Int -> String)不是一般的Int,String的基础类型类型。它表示一个函数,改函数的参数是Int型返回值是String型。

实例二、一个函数作为另一个函数的参数

func hasAnyMatches(list: [Int], condition: Int -> Bool) -> Bool {

    for item in list {

        if condition(item) {

            return true

        }

    }

    return false

}

func lessThanTen(number: Int) -> Bool {

    return number < 10

}

hasAnyMatches(numbers, lessThanTen) //swift1.0的写法

//hasAnyMatches(numberscondition:lessThanTen) //swift2.0的写法

实例三、使用in将参数和返回值类型声明与闭包函数体进行分离

======写法一======

numbers.map({

    (number: Int) -> Int in

    let result = 3 * number

    return result

})

======写法二======

numbers.map { (number: Int) -> Int in

    let result = 3 * number

    return result

}

======写法三======

func change(number : Int) -> Int{

    let result = 3 * number

    return result

}

numbers.map(change)

上面三个例子中都出现了函数后面没有加(),可以理解为这时把函数当成了变量来用。和c++中的函数指针有点像。

虽然上面这么理解函数,但是我到现在也搞不清楚什么时候要加(),什么时候不加。

swift教程:http://c.biancheng.net/cpp/html/2285.html





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值