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","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.
原文链接:https://www.f2er.com/swift/324986.html