swift学习之函数

函数定义

func 函数名(参数列表) -> 返回值类型 {
    //函数实现
}

参数

swift函数参数默认的是输入参数或者常量参数,不允许在函数体中修改
如果想要在函数体中修改参数值,需要在参数列表对应的参数前面加var,将参数变成变量参数 (修改形参值其实没有多大卵用,swift3中将不在存在这样语法)
上述所说的修改都是指对于形参的修改,并不能影响到传输参数的本身的值,因为函数默认的都是值传递,型参值只是传入参数的值copy
如果想要在函数体内修改参数值影响到外部传入参数本身,需要在参数列表对应的形参前面添加inout关键字,参数传值就会变成址传递

//普通值传递函数
func valueFunction(title:String) -> Void {
    //title = "Hello World"//非法操作
}

//址传递函数
func addressFunction(inout title:String) -> Void {
    title = "Hello World"
}

var title = "Hello"
addressFunction(&title)
print(title)   //结果Hello World

返回值

swift中函数没有返回值可以直接省略-> Void或者-> ()Void()是等价的

函数类型

swift中的函数类型,可以当做一个自定义的数据类型,可以像基础数据类型那样,其实就是函数指针,代表的是具有特定参数列表,和特定返回值类型的一类函数
函数类型的格式
(参数类型列表) -> 返回值类型
valueFunction函数的类型就是String -> Void或者String -> ()
addressFunction函数的类型就是(inout String) -> Void或者(inout String) -> ()
swift函数返回值指向符->是右结合的
String -> String -> String等价于String -> (String -> String),代表的是有一个String类型的参数,并且返回一个带有一个String类型的参数返回值类型为String的一类函数
为了提高可读性,通常我们在使用函数类型时候都会选择自定义一个函数类型的别名出来
typealias 函数类型别名 = 要使用别名的函数类型

typealias AddressFunctionType = (inout String) -> Void
var address = "Hello"
func addressF() -> AddressFunctionType {
    return addressFunction
}
var addressFunc:AddressFunctionType = addressF()
addressFunc(&address)
print(address) //结果Hello World

你可能感兴趣的:(swift学习之函数)