一  、   常量和变量

Swift语言 对常量和变量的声明进行了明确的区分

Swift语言的常量类型比C 语言的constants类型更加强大,语义更加明确。

常量和变量的区别是常量在设置或初始化后其值不允许改变,而变量允许,除此之外,Swift语言中变量类型能使用的地方,常量类型也同样能使用,如作为输入参数等。

Swift语言中常量类型使用let 关键字进行声明,变量类型使用var 关键字进行声明,如

let maximumNumberOfLoginAttempts
=10

               var currentLoginAttempt
=

以上语句声明了一个名字为maximumNumberOfLoginAttempts的常量,其值为10;接着又声明了一个名字为currentLoginAttempt的变量,其初始值为0。

如果一行中只有一条语句,语句最后就不需要带分号,如果一行中带有多条语句,语句之间就需要加分号,而最后一条不需要,这也体现和反应了Swift语言语法设计简洁和明确的思想。如以下语句所示:

let cat = ""; println(cat)

在Swift中常量和变量可以是任何类型。当声明一个常量或一个变量时,你可以为其提供一个类型标识,来清楚表示该常量或变量的类型。
           声明语法是在常量和变量名字后面跟着一个冒号,接着跟着类型的名字。如下所示声明了一个类型为字符串类型(String)名字为welcomeMessage的变量。

var welcomeMessage: String

在作了以上声明后,welcomeMessage变量就可以设置为任何字符串值,如:

welcomeMessage = “Hello"

实际上你很少需要为一个变量声明或常量声明指定类型。如上面的对maximumNumberOfLoginAttempts常量和currentLoginAttempt变量的声明,Swift编译器能够根据声明中提供的初始值自动推断其为Int类型。

如下语句Swift推断你想创建一个Double类型的常量。

let pi =3.14159

因次当你定义一个常量或变量时为其提供了一个初始值,就不再需要另外为其指定类型,Swift编译器可以从中推断出其类型。

二、多样化的数字表示。

Swift支持以8位、16位、32, 和64 位形式来表达一个有符号和无符号形式的整数类型。整数类型的命名遵从和C语言相似的约定,如UInt8代表一个8位无符号整数,Int32代表一个32位有符号整数,Swift建议你通常使用Swift定义的一个位数和和当前平台的本地字大小相同的Int整数类型,这样可以保持代码的一致性和互操作性,避免了不同整数类型之间的相互转换。

Swift中整型常量数字的表达可以使用十进制、二进制、八进制、十六进制等多种形式:

let decimalInteger = 17        //十进制表达(没有前缀)

let binaryInteger = 0b10001       // 二进制表达(0b开头)

let octalInteger = 0o21           // 八进制表达(0o开头)

let hexadecimalInteger = 0x11     // 十六进制表达(0x开头)

Swift也提供Double(64位)和Float(32位)两种形式的浮点数支持。

Swift中,浮点数常量数字的表达支持十进制(没有前缀)或十六进制(0x开头)两种形式,并支持不同的指数形式。如下所示:

1.25e2 means 1.25 × 102, or125.0. 十进制表达形式(不带前缀,指数用大小写的e来指示)

0xFp2 means 15 × 22,
or60.0.    十六进制表达形式(以0x开头,指数用大小写的p来指示)

Swift中,为了使数字表达更加易读和自然,数字表达格式还能包含额外的信息,如整数和浮点数都能在前面添加额外的0以及在数字之间包含下划线。如下所示:

let paddedDouble = 000123.456

let oneMillion = 1_000_000

let justOverOneMillion = 1_000_000.000_000_1

三、 多元组

多元组(Tuples)是Swift语言提供的一种新的数据类型,是一种多个数值的组合。一个多元组可以是任意类型甚至是不同类型数值的组合。

     如下所示:

let http404Error
= (404,"Not Found")

该例子定义了一个描述HTTP状态码的多元组常量http404Error,该常量的类型为(Int, String)的多元组类型,其值为(404, "Not Found")。该多元组表示了一个整数和一个字符串的组合。

当使用时,你可以从多元组中分解出每个分离的值。如下语句所示:

let (statusCode,statusMessage)
=http404Error

println("The status code is\(statusCode)")

// prints "The status code is 404"

println("The status message is\(statusMessage)")

// prints "The status message is Not Found"

当你仅需要多元组的部分值时,可以使用符合‘_’来指示忽略的其它项:

let (justTheStatusCode,_)
=http404Error

println("The status code is\(justTheStatusCode)")

// prints "The status code is 404"

另外还可以使用索引来存取一个多元组中的每个独立的项:

println("The status code is\(http404Error.0)")

// prints "The status code is 404"

println("The status message is\(http404Error.1)")

// prints "The status message is Not Found"

当多元组定义时你还可以为多元组中的每一个独立项命名:

let http200Status
= (statusCode:200,description:“OK")

然后你可以使用命名的元素名来存取这些元素的值:

println("The status code is\(http200Status.statusCode)")

// prints "The status code is 200"

println("The status message is\(http200Status.description)")

// prints "The status message is OK”

多元组主要用于函数的返回值,如果一个函数需要返回多个值,如一个函数需要返回上面描述的HTTP状态码,就可以定义和返回一个上面描述的的多元组。

多元组类型提供了一种简洁的方式使一个函数可以返回多个不同类型的返回值。

多元组适合于创建相关值的临时组合,而不适合于创建复杂的数据结构。

四 、选项类型:

选项类型是Swift语言提供的又一种强大的新的数据类型,用来表达一个可能存在也可能不存在的值类型。

与选项类型能力最接近的是Objective-C语言中的一个可能返回一个对象,也可能返回一个nil的方法的使用。在Objective-C语言中nil意味着一个有效对象的不存在,但在Objective-C语言中nil仅能够工作于对象,而不能工作于结构以及其它基本C类型或者枚举类型。
对于这些类型值的不存在Objective-C语言用一个NSNotFound特殊值表示。

而Swift的选项类型可以指示任何类型值的不存在,而不需要另外定义任何其它特殊值。

如一个字符串类型可以使用其方法toInt来转换一个字符串的值为一个整数,可是,不是每一个字符串都能够转换为一个整数。如含有数字的字符串如"123"
可以进行转换,而不含数字的字符串如"hello, world" 则不能转换。这种情况如果使用选项类型就非常有用。

如例子:

let possibleNumber
="123"

let convertedNumber =possibleNumber.toInt()

由于toInt方法可能失败,因此编译器推断possibleNumber.toInt()返回的是一个optional Int类型。一个 optional Int
类型在语法上写作:Int?。选项类型的变量或常量指示该常量或变量允许没有值。

‘?’标识符指示该值是一个选项类型,意味着该类型值可以包含有效的整数值,也可能什么值也没有包含。

Swift中你可以使用if语句来判断一个选项是否包含一个值。如果一个选项包含一个值,它被评估为true,否则评估为false。如果使用if语句评估一个选项包含了一个值,然后就能够在选项名字后面添加一个!来获取该选项的值。这在Swift语言中称作选项值的强制展开。

如下例子展示了如何强制展开一个选项值:

ifconvertedNumber{

println("\(possibleNumber)
has an integer value of \(convertedNumber!)")

}else {

println("\(possibleNumber)
could not be converted to an integer")

}

需要强调的是,如果试图使用!来存取一个不存在的选项值会触发一个运行时错误,因此在使用!来存取选项值之前应该总是确保该选项值包含一个有效值,或者采用上面的方式进行判断。

Swift中你还能够使用选项绑定来判断一个选项是否包含一个有效值。选项绑定作为if
或while语句的判断语句使用,在判断语句中先取出选项中的值并赋值给一个常量或变量,然后使用该常量或变量来检查和使用该选项中的值。

如下例子展示了如何使用选项绑定来使用一个选项中的值。

ifletactualNumber
= possibleNumber.toInt() {

println("\(possibleNumber)
has an integer value of \(actualNumber)")

}else {

println("\(possibleNumber)
could not be converted to an integer")

}

你可以通过为一个选项变量赋值为nil,来设置该选项变量为一个无值的状态:

var serverResponseCode: Int? = 404

选项变量serverResponseCode 包含一个实际的整数值404.

serverResponseCode = nil

现在serverResponseCode不包含值。

如果你定义一个选项常量或变量,但没有为其提供默认值,该常量或变量自动被设置为nil。

nil在Objective-C是一个代表不存在对象的指针,而在Swift中它代表一个确定类型值的不存在,并且在Swift中任意类型
的选项都可以设置为nil,而不仅仅是对象类型。

一个选项类型在首次设置时,如果为其设置了一个有效值,由于这时选项类型的值程序是清楚的,并且如果在此后使用该选项的每个地方也能够确信该选项的值存在,这种类型的选项就可以定义为一个称为隐含的已展开的选项。

一个隐含的已展开的选项在使用时不再需要使用条件语句来检查以及使用强制展开或选项绑定来取出选项中的值。

你在选项类型的常量或变量后面放置一个‘!’符号标识来指示该选项是一个隐含的已展开的选项。

隐含的已展开的选项通常在类的初始化期间使用。

如下展示了如何定义一个隐含的已展开的选项及如何使用它:

letassumedString:String!
="An implicitly unwrapped optional string."

println(assumedString)

// no exclamation mark is needed to access its value

当然需要注意的是如果试图存取一个不包含值的隐含的已展开的选项,仍然会触发一个运行时错误。

版权所有,请转载时注明链接和出处,谢谢!

苹果新的编程语言 Swift 语言进阶(二)--基本数据类型的更多相关文章

  1. 苹果新的编程语言 Swift 语言进阶(一)--综述

    Swift 是苹果开发和提供的供开发IOS 和OS X应用的一门新的语言.Swift语言基于C 和Objective-C语言,除了提供C 和Objective-C语言具有的所有语法功能外,为了编程方便 ...

  2. 苹果新的编程语言 Swift 语言进阶(三)--基本运算和扩展运算

    一 基本操作运算 1. 赋值操作 在Swift 中,能够使用赋值操作为一个常量或一个变量赋值,也能够使用多元组一次为多个常量或变量赋值. Swift 的赋值操作与其他语言最大的不同是赋值操作除了可以为 ...

  3. 苹果新的编程语言 Swift 语言进阶(七)--枚举、结构、类

    Swift语言中,具有类特征的类型包括三种,即枚举类型.结构类型(包括基本类型,基本类型实际都是结构类型的特例).类.其中枚举类型.结构类型是属于值类型,类属于引用类型.三种类型都可以添加属性.方法. ...

  4. 苹果新的编程语言 Swift 语言进阶(四)--字符串和收集类型

    一.字符串( String  )和字符类型(Character) 字符串是一种字符的带次序的收集类型(相当于数组),字符是字符串中的元素. 在Swift 语言中,字符串是编码独立的Unicode字符的 ...

  5. 苹果新的编程语言 Swift 语言进阶(十五)--协议

    协议定义了适合某个特定任务或功能需要的方法.属性和其它需求的一个蓝图.协议本身不提供这些需求的实现,它只是描述了一个任务或功能实现的蓝图. 协议与java 语言中的接口定义类似,都是描述了一个实现可以 ...

  6. 苹果新的编程语言 Swift 语言进阶(十四)--扩展

    扩展是为一个已经存在的类.结构.枚举类型添加新功能的一种方式,包括为不能存取源代码的那些已经存在的类型添加功能. 扩展类似于Objective-C语言中的类别,与类别不同的是Swift语言的扩展没有名 ...

  7. 苹果新的编程语言 Swift 语言进阶(五)--控制流

    Swift 语言支持C语言全部的控制语句.包含for  和while循环语句,if和switch条件语句,以及break和continue控制语句等. Swift 语言除了支持以上语句,还添加了一个f ...

  8. 苹果新的编程语言 Swift 语言进阶(十六)--泛型

    泛型允许你定义一个宽松.可重用的函数或者类型,使用泛型能够避免代码的重复,也能以更清楚和抽象的方式来表达程序的意图. 泛型是Swift语言提供的强大功能之一,Swift提供的许多标准库都使用了泛型来创 ...

  9. 苹果新的编程语言 Swift 语言进阶(十二)--选项链

    选项链是使用选项来查询和调用其属性.方法或下标的一个过程,假设选项包括一个值,则属性.方法.下标的查询和调用成功,否则,调用返回nil. 选项链能用在不论什么类型的选项来检查对其一个属性.方法.下标的 ...

随机推荐

  1. 详解EBS接口开发之供应商导入(补充)--错误信息处理

    check reject details on records of AP_SUPPLIER_INT SELECT s.parent_table,s.reject_lookup_code,S.LAST ...

  2. 有n个数,输出其中所有和为s的k个数的组合。

    分析:此题有两个坑,一是这里的n个数是任意给定的,不一定是:1,2,3...n,所以可能有重复的数(如果有重复的数怎么处理?):二是不要求你输出所有和为s的全部组合,而只要求输出和为s的k个数的组合. ...

  3. javascript之类型转换

    JavaScript是一种无类型语言,但同时JavaScript提供了一种灵活的自动类型转换的处理方式.基本规则是,如果某个类型的值用于需要其他类型的值的环境中,JavaScript就自动将这个值转换 ...

  4. kindeditor用法简单介绍

    最近做毕业设计用了一个叫做kindeditor的文本编辑工具,相信很多人都用过,这货和fckeditor差不多,个人感觉这个的皮肤更好看,而且对中文的支持更好,没那么容易出现中文乱码问题.下次记录一下 ...

  5. iOS中的两种搜索方式UISearchDisplayController和UISearchController

    大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请多提意见,如果觉得不错请多多支持点赞.谢谢! hopy ;) 以前iOS的搜索一般都使用UISearchDisplayCon ...

  6. 1.QT中播放视频,录音程序的编写

     1  通过process的方式播放视频 T22VideoPlayer.pro HEADERS += \ MyWidget.h SOURCES += \ MyWidget.cpp QT += gu ...

  7. React Native网络请求

    很多移动应用都需要从远程地址中获取数据或资源.你可能需要给某个REST API发起POST请求以提交用户数据,又或者可能仅仅需要从某个服务器上获取一些静态内容--以下就是你会用到的东西.新手可以对照这 ...

  8. Eclipse中如何快速查看jar包中 的class源码

    我们查看jar源码时,一般是安装个jd-gui,把jar拷出来,然后从jd-gui中打开jar再查看源码,这个过程不免有些麻烦,当然,本篇所讲的快速查看的方法也没什么高科技手段,只是将jd-gui集成 ...

  9. 给EditText的drawableRight属性的图片设置点击事件

    这个方法是通用的,不仅仅适用于EditText,也适用于TextView.AutoCompleteTextView等控件. Google官方API并没有给出一个直接的方法用来设置右边图片的点击事件,所 ...

  10. 【一天一道LeetCode】#237. Delete Node in a Linked List

    一天一道LeetCode 本系列文章已全部上传至我的github,地址:ZeeCoder's Github 欢迎大家关注我的新浪微博,我的新浪微博 欢迎转载,转载请注明出处 (一)题目 Write a ...