《swift2.0 官方教程中文版》 第3章-02类型

本文深入介绍了Swift编程语言中的各种类型概念,包括基本类型如元组、函数、数组和字典等,以及高级类型如可选类型、隐式解析可选类型、协议合成类型等,并解释了类型推断和类型继承子句的应用。

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


import Foundation


/*类型注解**************************************************/

let someTuple: (Double, Double) = (3.14159,2.71828)

func someFunction(a: Int){/*...*/}

//在第一个例子中,表达式 someTuple 的类型被指定为 (Double, Double) 。在第二个例子中,函数 someFuncti on 的参数 a 的类型被指定为 Int




/*类型标识符**************************************************/

typealias Point = (Int, Int)

let origin: Point = (0, 0)




/*元组类型**************************************************/

//元组类型使用逗号隔开并使用括号括起来的0个或多个类型组成的列表。




/*函数类型**************************************************/

func simpleAssert(@autoclosure condition: Void -> Bool, _ message: String) {

    if !condition() {

        print(message)

    }

}

let testNumber = 5

simpleAssert(testNumber % 2 == 0, "testNumber isn't an even number.")

// prints "testNumber isn't an even number."




/*数组类型**************************************************/

//Swift语言中使用[ type ]来简化标准库中定义 Array<T> 类型的操作。 换句话说,下面两个声明是等价的:

let someArray: [String] = ["Alex", "Brian","Dave"]

let someArray2: Array<String> = ["Alex", "Brian","Dave"]

//上面两种情况下,常量 someArray 都被声明为字符串数组。数组的元素也可以通过 [] 获取访问: someArray[0] 是指第0个元素 “Alex”

//下面例子中使用三对方括号创建三维整数数组。

var array3D: [[[Int]]] = [[[1, 2], [3, 4]], [[5, 6], [7, 8]]]




/*字典类型**************************************************/

let someDictionary: [String: Int] = ["Alex": 31, "Paul": 39]

let someDictionary2: Dictionary<String, Int> = ["Alex": 31, "Paul": 39]




/*可选类型**************************************************/

//Swift定义后缀 ? 来作为标准库中的定义的命名型类型 Optional<T> 的简写。换句话说,下面两个声明是等价 :

var optionalInteger: Int?

var optionalInteger2: Optional<Int>


optionalInteger = 42




/*隐式解析可选类型**************************************************/

//Swift语言定义后缀 ! 作为标准库中命名类型 ImplicitlyUnwrappedOptional<T> 的简写。换句话说,下面两个声 明等价:

var implicitlyUnwrappedString: String!

var implicitlyUnwrappedString2: ImplicitlyUnwrappedOptional<String>


//有了可选,你在声明隐式解析可选变量或特性的时候就不用指定初始值,因为它有缺省值 nil

//由于隐式解析可选的值会在使用时自动解析,所以没必要使用操作符 ! 来解析它。也就是说,如果你使用值为 nil 的隐式解析可选,就会导致运行错误。




/*协议合成类型**************************************************/

//协议合成类型是一种遵循具体协议列表中每个协议的类型。协议合成类型可能会用在类型注解和泛型参数中。

//协议合成类型的形式如下:

//protocol<Protocol 1, Procotol 2>

//协议合成类型允许你指定一个值,其类型遵循多个协议的条件且不需要定义一个新的命名型协议来继承其它想要 遵循的各个协议




/*元类型**************************************************/

//元类型是指所有类型的类型,包括类、结构体、枚举和协议。

class SomeBaseClass {

    class func printClassName() {

        print("SomeBaseClass")

    }

}

class SomeSubClass: SomeBaseClass {

    override class func printClassName() {

        print("SomeSubClass")

    }

}

let someInstance: SomeBaseClass = SomeSubClass()

// someInstance is of type SomeBaseClass at compile time, but 

// someInstance is of type SomeSubClass at runtime 

someInstance.dynamicType.printClassName()

// prints "SomeSubClass




/*类型继承子句**************************************************/

//类型继承子句被用来指定一个命名型类型继承的哪个类、遵循的哪些协议。类型继承子句也用来指定一个类需要 遵循的协议。类型继承子句开始于冒号 ,其后是类所需遵循的协议或者类型标识符列表或者两者均有。




/*类型推断**************************************************/

//Swift广泛的使用类型推断,从而允许你可以忽略代码中很多变量和表达式的类型或部分类型。比如,对于var x:Int = 0,你可以完全忽略类型而简写成var x = 0 ——编译器会正确的推断出x的类型 Int 。类似的,当完整的类型可以从上下文推断出来时,你也可以忽略类型的一部分。比如,如果你写了 let dict:Dictionary = ["A":1],编译提也能推断出 dict 的类型是 Dictionary<String, Int>

let e = 2.71828 // The type of e is inferred to be Double. 

let eFloat: Float = 2.71828 // The type of eFloat is Float.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值