swift第一章

swift中增加的类型:Tuple(元组类型),可以让你创建或者传递一组数据,

比如作为函数的返回值时,你可以用一个元组可以返回多个值。

swift中还增加了可选(Optional)类型,用于处理值缺失的情况。

可选表示“那儿有一个值,并且它等于X”或者“那儿没有值”。

可选有点像在OC中使用nil,但是它可以用在任何类型上,不仅仅是类。

可选类型比OC中的nil指针更加安全也更具表现力。

常量和变量必须在使用前声明

常量:let  maxnum = 10

变量:var currentnum = 50

var x = 0.0, y = 0.0, z = 0.0

类型标注:

var welcomeMessage: String

welcomeMessage = "Hello swift"

注意:一般来说你很少需要写类型标注。

如果你在声明常量或者变量的时候赋了一个初始值,

Swift可以推断出这个常量或者变量的类型,请参考类型安全和类型推断。

在上面的例子中,没有给welcomeMessage赋初始值,

所以变量welcomeMessage的类型是通过一个类型标注指定的,

而不是通过初始值推断的。

常量和变量的命名

你可以用任何字符作为常量和变量名字

let n = 3.14

let 你好 = "你好 swift"

let ???? = "swift good"

注意:常量与变量不能包含数学符号,箭头,保留的(或者非法的)Unicode码,

连线与制表符。也不能以数字开头,但是可以在常量与变量名的其它地方包含数字

注意:如果你需要使用与Swift保留关键字相同的名称作为常量或者变量名,

你可以使用反引号(`)将关键字包围的方式将其作为名字使用。

无论如何,你应当避免使用关键字作为常量或变量名,除非你别无选择。

可以更改值

var feiendly = "Hello!"

friendly = "swift++!"   OK

let lan = "swift+"

lan = "swift++"      error编译器会报错

输出常量和变量

printfIn(常量或者变量名)  输出的内容会在最后换行

print(常量或者变量名)     输出的内容不会在最后换行

printIn("this is a string!")

占位符输出

var name = "Tom"

printIn("the named is \(name)")

注释:

单行注释://

多行注释:/*注释内容*/

多行注释中包含多行注释/* /**/ */

swift每条语句后面可以写也可以不写";",但是一种情况必须写:在同一行内

写多条独立的语句。

let cat = "???";printIn(cat)

整数:

范围:let minValue = Uint8.min Uint8类型最小值0

let maxValue = Uint8.max Uint8类型最大值255

int

一般来说,你不需要指定整数的长度,swift提供了一个特殊的整数类型int,

长度与当前平台的原生字长相同

-在32位平台上,Int和Int32长度相同

-在64位平台上,Int和Int64长度相同

UInt

swift也提供了一个特殊的无符号类型UInt,长度与当前平台的原生字长相同

-在32位平台上,UInt和UInt32长度相同

-在64位平台上,UInt和UInt64长度相同

尽量不用UInt:统一使用Int可以提高代码的可复用性,

避免不同类型数字之间的转换,

并且匹配数字的类型推测

浮点数

有小数部分的数字,20.36,0.35

double表示64位浮点数

float 表示32位浮点数

注意:Double精确度很高,至少有15位数字,而Float最少只有6位数字。

选择哪个类型取决于你的代码需要处理的值的范围。

类型推测

let meaningOf = 42

meaningOf被推测成int类型

let pi = 3.14159

pi被推测成double类型

当推测浮点数的类型时,Swift 总是会选择Double而不是Float。

如果表达式中同时出现了整数和浮点数,会被推测为Double类型:

let mun = 3+3.14159

数值类型转换

let two:UInt16 = 2;

let one:Uint8 = 1;

let onetwo = two+UInt16(one)

整数和浮点数转换

整数和浮点数的转换必须显示指定类型

let three = 3

let point = 0.259

let pi = Double(three)+point

let inter = Int(point)

类型别名:就是给现有类型定义一个名字。(typelias)

typelias audio = UInt16

var maxAmp = audio.min

布尔值

swift有两个布尔敞亮,true或者false

let one = true;

let two = flase;

if one

{

printIn("this is true!");

}

else

{

printIn("this is false!");

}

let i = 1

if i

{

////程序会报错

}

let i=1

if i==1

{

////程序不会报错

}

元组

把多个值组合成一个符合值,元组内的值可以是任意类型,

并不要求是相同类型。

let httpError = (404,"Not Found")

可以描述为一个类型为(int,string)的元组。

你可以将一个元组的内容分解(decompose)成单独的常量和变量,

然后你就可以正常使用它们了:

let (statusCode,statusMessage) = httpError

printIn("the status code is\(statusCode)")

printIn("the status message is\(statusMessage)")

如果你只需要一部分元组值,

分解的时候可以把要忽略的部分用下划线(_)标记:

let (statusCode,_) = httpError

printIn("ths status code is\(statusCode)")

此外,你还可以通过下标来访问元组中的单个元素,下标从零开始:

printIn("the status code is\(httpError.0)")

printIn("the status Message is\(httpError.1)")

你可以在定义元组的时候给单个元素命名:

let http200 = (statusCode:200,description:"OK")

printIn("the status code is\(http200.statusCode)")

printIn("the description is\(http200.description)")

可选

使用可选来处理值可能缺失的情况。

注意:C 和 Objective-C 中并没有可选这个概念。

最接近的是 Objective-C 中的一个特性,

一个方法要不返回一个对象要不返回nil,nil表示“缺少一个合法的对象”。

然而,这只对对象起作用——对于结构体,

基本的 C 类型或者枚举类型不起作用。

对于这些类型,Objective-C 方法一般会返回一个

特殊值(比如NSNotFound)来暗示值缺失。

这种方法假设方法的调用者知道并记得对特殊值进行判断。

然而,Swift 的可选可以让你暗示任意类型的值缺失,并不需要一个特殊值。

下面的例子使用toInt方法来尝试将一个String转换成Int

let Number1 = "123"

let converNum = Number.toInt()

因为toInt方法可能会失败,所以它返回一个可选的(optional)Int,

而不是一个Int。

一个可选的Int被写作Int?而不是Int。

问号暗示包含的值是可选,也就是说可能包含Int值也可能不包含值。

(不能包含其他任何值比如Bool值或者String值。只能是Int或者什么都没有。)

if语句以及强制解析

你可以使用if语句来判断一个可选是否包含值。

如果可选有值,结果是true,如果没有值,结果是false。

当你确定可选包确实含值之后,

你可以在可选的名字后面加一个感叹号(!)来获取值。

这个惊叹号表示“我知道这个可选有值,请使用它。

”这被称为可选值的强制解析(forced unwrapping):

if converNum

{

printIn("\(Numner1) has an value\(converNum!)")

}

else

{

printIn("\(Number1) can not be conver to int")

}

注意:使用!来获取一个不存在的可选值会导致运行时错误。

使用!来强制解析值之前,一定要确定可选包含一个非nil的值。

可选绑定

使用可选绑定(optional binding)来判断可选是否包含值,

如果包含就把值赋给一个临时常量或者变量。

可选绑定可以用在if和while语句中来对可选的值进行判断并把值赋给一个

常量或者变量。

if let anNum = Number1.toInt()

{

printIn("\(Numner1) has an value\(anNum)")

}

else

{

printIn("\(Number1) can not be conver to int")

}

这段代码可以被理解为:

“如果Number1.toInt返回的可选Int包含一个值,

创建一个叫做anNum的新常量并将可选包含的值赋给它。”

如果转换成功,anNum常量可以在if语句的第一个分支中使用。

它已经被可选包含的值初始化过,所以不需要再使用!后缀来获取它的值。

在这个例子中,anNumber只被用来输出转换结果。

nil

你可以给可选变量赋值为nil来表示它没有值

var serverRes:Int? = 404

serverRes = nil

注意:nil不能用于非可选的常亮和变量。

如果你的代码有常亮或者变量需要处理值缺失的情况,请把它们声明为可选类型。

如果你声明一个可选常亮或者变量但是没有复制,它们会自动被设置为nil

var sur:String?

//sur = nil

注意:Swift 的nil和 Objective-C 中的nil并不一样。

在 Objective-C 中,nil是一个指向不存在对象的指针。

在 Swift 中,nil不是指针——它是一个确定的值,用来表示值缺失。

任何类型的可选都可以被设置为nil,不只是对象类型。

隐式解析可选

这种类型的可选被定义为隐式解析可选(implicitly unwrapped optionals)。

把想要用作可选的类型的后面的问号(String?)改成感叹号(String!)

来声明一个隐式解析可选。

let possA:String? = "this is 强制解析需要!取值"

printIn(possA!)

let possB:String! = "this is 隐式转换不需要!"

printIn(possB)

你可以把隐式解析可选当做一个可以自动解析的可选。

你要做的只是声明的时候把感叹号放到类型的结尾,

而不是每次取值的可选名字的结尾。

注意:如果你在隐式解析可选没有值的时候尝试取值,会触发运行时错误。

和你在没有值的普通可选后面加一个惊叹号一样。

你任然可以把隐式解析可选当做普通可选来判断它是否包含值

if possB

{

printIn(possB)

}

你也可以在可选绑定中使用隐式解析可选来检查并解析它的值:

if let defindes = possB

{

printIn(defindes)

}

注意:如果一个变量之后可能变成nil的话请不要使用隐式解析可选。

如果你需要在变量的生命周期中判断是否是nil的话,请使用普通可选类型。

断言

可选可以让你判断值是否存在,你可以在代码中优雅地处理值缺失的情况。

然而,在某些情况下,如果值缺失或者值并不满足特定的条件,

你的代码可能并不需要继续执行。

这时,你可以在你的代码中触发一个断言(assertion)来结束代码运行

并通过调试来找到值缺失的原因。

let age = -3

assert(age >= 0, "A person‘s age cannot be less than zero")

这里因为age<0,所以断言会触发

在这个例子中,只有age >= 0为true的时候代码运行才会继续,

也就是说,当age的值非负的时候。

如果age的值是负数,就像代码中那样,age >= 0为false,断言被触发,

结束应用。

何时使用断言

当条件可能为假时使用断言,但是最终一定要保证条件为真,

这样你的代码才能继续运行。

断言的适用情景:

- 整数的附属脚本索引被传入一个自定义附属脚本实现,

但是下标索引值可能太小或者太大。(自己的理解是数组越界)

- 需要给函数传入一个值,但是非法的值可能导致函数不能正常执行。

- 一个可选值现在是nil,但是后面的代码运行需要一个非nil值。

注意:

断言可能导致你的应用终止运行,

所以你应当仔细设计你的代码来让非法条件不会出现。

然而,在你的应用发布之前,有时候非法条件可能出现,

这时使用断言可以快速发现问题。

swift第一章

时间: 2024-08-09 11:13:25

swift第一章的相关文章

C#认证第一章1 题 11题

C#第一章第一题 C#认证第一章  11题

计算机网络安全第一章

计算机网络不安全因素:偶发因素.自然因素.认为因素(被动攻击.主动攻击.邻近攻击.内部人员攻击.分发攻击) 不安全的主要原因: 1.互联网具有不安全性:开放的网络,国际性的网络,自由性的网络 2.操作系统存在的安全问题:操作系统软件自身的不安全性,留下"后门".操作 系统体系结构造成的不安全隐患.操作系统可以创建进程.操作系统的无口令入口及隐蔽通道 3.数据安全问题 4.传输线路安全问题 5.网络应用存在的安全问题 6.网络安全管理问题 计算机网络安全是一门涉及计算机科学.网络技术.通

第一章读后感

第一章主要讲述了安卓系统的一些基本知识,安卓系统的架构以及如何查看Linux内核版本和其定义的规则. Android的体系结构主要由Linux内核.C/C++代码库.Android SDK API和应用程序四层构成,因此,Android和linux的核心部分差异非常的小:而且Android SDK API 是由Java语言编写的. 安卓移植在很大程度上是Linux内核移植主要就是移植驱动程序. 怎样学习Linux驱动开发呢,由于Linux的内核版本更新较快,每一次内核的变化就意味着Linux驱动

《大道至简》第一章读后感

经常听见有人抱怨编程太难,说自己不是学软件的料,那么他们真该好好看看<大道至简>这本书,相信他们看完这本书后会有很大收获. <大道至简>第一章引用了一个很简单的故事“愚公移山”,用这个故事很好的概述了我们在完成一个项目时所要进行的步骤.听上去“愚公移山”和编程简直是风马牛不相及,但是看过作者的叙述又有原来如此的感觉.其实编程并没有什么难懂的,就和我们日常生活一样,发现问题,分析问题,提出解决问题的方案,实施,和后续的验收.例如某天我们突然发现家里放不出水了,这就是发现问题,我们会观

读《大道至简》第一章有感

近期老师为我们推荐了一本书,叫做<大道至简>,书很薄,却精辟的讲述了软件工程专业对于编程这一实践过程的重要思想,我们总以为编程是怎样的有难度,却从来没有考虑过编程为什么难,他到底难在哪.事实是我们错了,我们不是不会技术,而是不会方法. 第一章主要讲述了编程的精义,作者利用愚公移山的故事,简洁明了的讲解了编程的实质含义,从愚公移山实施的各个方面与编程联系在一起,讲解了编程的过程.从开始的原因,到编程实现的目标,然后小组团队对这个编程项目的讨论,以及各个人员在不同项目上的安排,并且还有项目之外的协

C++ Primer快速学习 第一章 入门

很多人说C++Primer不适合于入门,本系列入门文章向大家证明了:这是一个谎言. 第一章 入门 本章介绍 C++ 的大部分基本要素:内置类型.库类型.类类型.变量.表 达式.语句和函数. 1.1. 编写简单的 C++ 程序 每个 C++ 程序都包含一个或多个 函数 ,而且必须有一个命名为 main.函数 由执行函数功能的语句序列组成.操作系统通过调用 main 函数来执行程序, main 函数则执行组成自己的语句并返回一个值给操作系统. 下面是一个简单的 main 函数,它不执行任何功能,只是

数据库期末考试复习题 第一章

作者 : Dolphin 原文地址:http://blog.csdn.net/qingdujun/article/details/27820507 一.单项选择题: 1. 位于用户和操作系统之间的一层数据管理软件是  C    . A.DBS  B.DB  C.DBMS  D.MIS 2. 数据库系统中的数据模型通常由    A     三部分组成. A.数据结构.数据操作和完整性约束 B.数据定义.数据操作和安全性约束 C.数据结构.数据管理和数据保护 D.数据定义.数据管理和运行控制 3. 

大道至简第一章读后感 Java伪代码形式

观看了大道至简的第一章之后,从愚公移山的故事中我们可以抽象出一个项目, 下面用Java 伪代码的形式来进行编写: import java(愚公移山的故事) //愚公移山 public class yugong { //项目的目的:惩山北之塞,出入之迂: //项目的基本沟通方式:聚室而谋曰: //愚公确定的项目的目标:毕力平险,指通豫南,达于汉阴: //项目的技术方案:扣石垦壤,箕畚运于渤海之尾: //项目中的三名技术人员以及工程管理人员:(愚公)率子孙荷担者三夫: //力量较弱,富有激情的外援:

2017.06.29 数据挖掘概念知识第一章

第一章1.数据仓库技术:1.数据清理 2.数据集成 3.联机分析处理2.数据挖掘(知识发现)过程P5详见图 1.数据清理 2.数据集成 3.数据选择 4.数据变换 5.数据挖掘 6.模式评估 7.知识表示3.大数据的特点: 1.量大 2.种类多 3.处理速度快 4价值密度低 5.复杂性4.类与概念描述方法过程: 1.数据特征化 2.数据区分 3.数据特征化和区分5.分类如何提供导出的模型: 导出的模型可以多种形式表示:分类规则.决策树.数学公式或神经网络6.一个模型是有趣的: 1.易于被人理解