一  、   常量和变量

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

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

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

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

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 高级语言(十一)--初始化类的析构函数的一个实例

    一 .实例的初始化          实例的初始化是准备一个类.结构或枚举的实例以便使用的过程. 初始化包含设置一个实例的每个存储属性为一个初始值,以及运行不论什么其他新的实例可以使用之前须要的设置或 ...

  2. 苹果公司的新的编程语言 Swift 高级语言(十五)--协议

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

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

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

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

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

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

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

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

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

  7. 苹果新的编程语言 Swift 语言进阶(十一)--实例的初始化与类的析构

    一 .实例的初始化          实例的初始化是准备一个类.结构或枚举的实例以便使用的过程.初始化包括设置一个实例的每一个存储属性为一个初始值,以及执行任何其它新的实例能够使用之前需要的设置或初始 ...

  8. 苹果新的编程语言 Swift 语言进阶(十)--类的继承

    一.类的继承 类能够从其它类继承方法.属性以及其它特性,当一个类从另外的类继承时,继承的类称为子类,它继承的类称为超类.在Swift中,继承是类区别与其它类型(结构.枚举)的基础行为. 1.1 .类的 ...

  9. 苹果新的编程语言 Swift 语言进阶(九)--方法和下标

    一.方法 方法是与特定类型相关的函数.与属性一样,方法也包括实例方法和类型方法. 类.结构.枚举都能定义实例方法,用来封装或实现给定类型的一个实例相关的功能或特定任务. 类.结构.枚举也能定义与类型本 ...

随机推荐

  1. ListView的cacheColorHint与listSelector物业和fragment里面onActivityResult问题没有响应

    fragment里面onActivityResult 如何才华被称之为.在使用时发现没反应,没注意这个问题谁. 多方法都不是非常方便.最终实验除了一个最简单的方法. startActivityForR ...

  2. Performance Monitor采集性能数据

    Performance Monitor采集性能数据 Windows本身为我们提供了很多好用的性能分析工具,大家日常都使用过资源管理器,在里面能即时直观的看到CPU占用率.物理内存使用量等信息.此外新系 ...

  3. Java中导入、导出Excel

    原文:Java中导入.导出Excel 一.介绍 当前B/S模式已成为应用开发的主流,而在企业办公系统中,常常有客户这样子要求:你要把我们的报表直接用Excel打开(电信系统.银行系统).或者是:我们已 ...

  4. wpf 9张图片的连连看

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.W ...

  5. Python 统计Facebook用户爱好的个数

    CODE: #!/usr/bin/python # -*- coding: utf-8 -*- ''' Created on 2014-8-12 @author: guaguastd @name: f ...

  6. JVM的参数详解(转)

    12年毕业到先在处理第一年外这几年纯属于打酱油,当初自学Java然后就出来找工作了,还有第一家面试就通过了挺幸运的 但之后的这段时间一直是处于吃老本的状态.最近心情真的很不好,各种黄老邪!一直处于堕落 ...

  7. Attribute(两)——定义自己的特色+Asp.net MVC中间filter详细解释

    部分博客是预先定义的有关特性的一些基本特征,同时还Attribute这一概念的一个宏观上的认识,在上篇博客结尾介绍了有关为自己定义特性服务的AttributeUsage,这篇博客主要是通过filter ...

  8. 漫话Unity3D(三)

    八.预制(Prefab) 这个单独提出来,是由于它太经常使用了.也是Unity 的核心要素之中的一个.原本Unity中的一个物体是你拖拽一个模型到场景中,或者创建一个几何体,或者灯光地形等,然后设置这 ...

  9. Android 应用程序启动过程源代码分析

    本文转自:http://blog.csdn.net/luoshengyang/article/details/6689748 前文简要介绍了Android应用程序的Activity的启动过程.在And ...

  10. <ASP.NET4 从入门到精通>学习笔记1

    非常久没有写东西了,今日有时间,開始整理一下关于ASP.NET 4的学习笔记.提醒自己,也欢迎评论. 概述一共分为6个大的部分,兴许文章.将依据每一个部分进行整理,本读书笔记仅仅是整理关键点,对于啰嗦 ...