一直以来都想通过个人的角度,来讲解一下Swift这门新的语言。这中间也纠结了很久,但是每次着手去赘述的时候,总觉得有些多余。因为这些学习的材料在苹果官网是一扒一大推。不过迎着“键盘在手,文艺喂狗!”的想法,还是谈一下吧。
首先我们了解一下Swift这门语言。Swift就像C语言一样,使用变量来进行存储并通过变量名来关联值。在swift中广泛的使用着不可变的变量,也就是我们常说的常量。但是Swift远远比C语言的常量强大。记住这里说的是比C的常量强大,并不是比C语言强大。这点要理解清楚。在Swift中如果你需要处理的值不需要改变,那使用常量的可以让我们的代码更清晰地表达我们的意图和逻辑。
除了我们熟悉的类型,Swift还增加了Objective-C中没有的高阶数据类型比如元组(Tuple)。元组可以让你创建或者传递一组数据,比如作为函数的返回值时,我们可以用一个元组可以返回多个值
Swift增加了可选(optional)类型,用于处理值缺失的情况。所谓的可选类型,接触过OC的肯定比较清楚一下。可选类型像是Objective-C中使用的nil,但是它可以在任何类型上,不仅仅是类!Swift有了可选类型的存在比OC中的nil指针更加安全也更具表现力。它是Swift许多强大类型的重要组成部分。
常量和变量
常量和变量必须在使用前声明,用let来声明常量,用var来声明变量
例如:letmax = 10;
varmin =1;
当然在Swift中我们也可以在一行中声明多个常量或者多个变量发,用都好隔开。
varx = 0.0,y = 0.0,z = 0.0
注意:如果我们的代码中有不需要改变的值,请使用let关键字将它声明为常量。只将需要改变的值声明为变量
类型标注:
当我们声明常量或者变量的时候可以加上类型标注,说明常量或者变量中要存储的值的类型。如果要添加类型标注,需要在常量或者变量名后面加上一个冒号和空格,然后加上类型名称。
例如:var welcomeMessage:String
在welcomeMessage中我们可以理解为:”声明一个类型为String,名字为welcomeMessage的变量”
类型为String的意思是可以存储任意String类型的值
welcomeMessage
=“Hello”
我们在Swift中可以根据自己喜欢的字符作为常量和变量名,包括Unicode字符!
例如:let $ = 3.3333,let你好=”Hello word!”,let
?? =“dogcow”
注意:常量与变量名不能包含数学符号,箭头,保留的(或者非法的)Unicode码位,连线与制表符。也不能以数字开头,但是可以在常量与变量名的其他地方包含数字。
一旦我们将常量或者变量声明为确定的类型,我们就可以使用相同的名字再次进行声明,或者改变其存储的值的类型。同时我们也不能讲常量与变量进行互转!
注意:如果我们需要使用Swift中保留关键字相同的名称作为常量或者变量名,我们可以使用反引号(^)将关键字包围的方式将其作为名字使用,但是无论如何我们都应当避免使用关键字作为常量或变量名。
输出常量和变量
在Swift中print(_:separator: terminator:)函数来输出当前常量或变量的值:
注:这也是区别OC语言之处
Swift用字符串插值(string interpolation)的方式把常量名或者变量名当做占位符加入到长字符串中,Swift会用当前常量或变量的值替换这些占位符。将常量或变量名放入圆括号中,并在开括号前使用反斜杠将其转义:
print("The current value of friendlyWelcome is \(friendlyWelcome)") //输出"The current value of friendlyWelcome is Bonjour!
注释
Swift中的注释与C语言的注释非常相似。单行注释以双正斜杠(//)作为起始标记
//这是一个注释
你也可以进行多行注释,其起始标记为单个正斜杠后跟随一个星号(/*),终止标记为一个星号后跟随单个正斜 杠(*/):
与C语言多行注释不同,Swift的多行注释可以嵌套在其它的多行注释之中。我们可以先生成一个多行注释块,然 后在这个注释块之中再嵌套成第二个多行注释。终止注释时先插入第二个注释块的终止标记,然后再插入第一个注释块的终止标记:
/*这是第一个多行注释的开头/*这是第二个被嵌套的多行注释*/这是第一个多行注释的结尾*/
即:/*/**/*/
分号的使用
与其他大部分编程语言不同,Swift并不强制要求我们在每条语句的结尾处使用分号(;),当然,你也可以按照 你自己的习惯添加分号。有一种情况下必须要用分号,即我们打算在同一行内写多条独立的语句:
let cat ="?"; print(cat) //输出"?"
整数:
Swift提供了8,16,32和64位的有符号和无符号整数类型。这些整数类型和C语言的命名方式很像,比如8位无符号整数类型是UInt8,32位有符号整数类型是Int32。就像Swift的其他类型一样,整数类型采用大写命名 法。
整数范围
访问不同整数类型的min和max属性来获取对应类型的最小值和最大值:
let minValue = UInt8.min // minValue为0,是UInt8类型
let maxValue = UInt8.max // maxValue为255,是UInt8类型
浮点数:
浮点数是有小数部分的数字,比如3.14159,0.1和-273.15。
浮点类型比整数类型表示的范围更大,可以存储比Int类型更大或者更小的数字。Swift提供了两种有符号浮 点数类型:
·Double表示64位浮点数。当你需要存储很大或者很高精度的浮点数时请使用此类型。
·Float表示32位浮点数。精度要求不高的话可以使用此类型。
·Double精确度很高,至少有15位数字,而Float只有6位数字。选择哪个类型取决于你的代码需要处理的值的
·范围,在两种类型都匹配的情况下,将优先选择Double
类型别名
布尔值
Swift有一个基本的布尔类型,叫做Bool。布尔值指逻辑上的值,因为它们只能是真或者假。Swift有两个布尔常量,true和false:
let orangesAreOrange = true
let turnipsAreDelicious = false
在我们编写条件语句,比如说if语句的时候,布尔值非常的好用
if turnipsAreDelicious {
print("Mmm,tasty turnips!")
} else {
print("Eww,turnips are horrible.")
}//输出"Eww, turnips are horrible."
元组:
元组把多个值组合成一个复合值。元组内的值可以是任意类型,并不要求是相同类型
let http404Error =
(404, "Not Found")
我们可以把任意顺序的类型组合成一个元组,这个元组可以包含所有类型
let (statusCode,statusMessage) = http404Error
print("The
status code is \(statusCode)")//输出"The status
code is 404"print("The status message is \(statusMessage)") //输出"The status message is Not Found"
可选类型 (重要)
使用可选类型来处理值可能缺失的情况。可选类型表示:
有值,等于x或者没有值
Swift的Int类型有一种构造器,作用是将一个String值转换成一个Int值。然而,并 不是所有的字符串都可以转换成一个整数。字符串"123"可以被转换成数字123,但是字符串"hello, world"不行。
下面的例子使用这种构造器来尝试将一个String转换成Int:
let possibleNumber = "123"let convertedNumber = Int(possibleNumber) //convertedNumber被推测为类型"Int?",或者类型"optional Int"
因为该构造器可能会失败,所以它返回一个可选类型(optional)Int,而不是一个Int。一个可选的Int被写作Int?而不是Int。问号暗示包含的值是可选类型,也就是说可能包含Int值也可能不包含值。(不 能包含其他任何值比如Bool值或者String值。只能是Int或者什么都没有。)
隐式解析可选类型
错误处理
错误处理来应对程序执行中可能会遇到的错误条件,相对于可选中运用值的存在与缺失来表达函数的成功与失败,错误处理可以推断失败的原因,并传播至程序的其他部分。
当一个函数遇到错误条件,它能报错。调用函数的地方能抛出错误消息并合理处理
func canThrowAnError()
throws {
//这个函数有可能抛出错误
}
一个函数可以通过在声明中添加 关键词来抛出错误消息。当你的函数能抛出错误消息时,你应该在表达式中前置 关键词。
do {try canThrowAnError() //没有错误消息抛出
} catch {//有一个错误消息抛出
}
一个 语句创建了一个新的包含作用域,使得错误能被传播到一个或多个 从句。
网友评论