Swift傻傻分不清楚系列(一)常量与变量

菜鸟从零开始认识学习Swift。感谢大神们翻译的文档。搬到自己小黑屋里慢慢看~~~

本页包含内容:

  • 常量和变量
  • 声明常量和变量
  • 类型标注
  • 常量和变量的命名
  • 输出常量和变量
  • 注释
  • 分号

Swift 是一门开发 iOS, OS X 和 watchOS 应用的新语言。然而,如果你有 C 或者 Objective-C 开发经验的话,你会发现 Swift 的很多内容都是你熟悉的。

Swift 包含了 C 和 Objective-C 上所有基础数据类型,Int表示整型值;DoubleFloat表示浮点型值;Bool是布尔型值;String是文本型数据。Swift 还提供了三个基本的集合类型,ArraySetDictionary,详见集合类型

就像 C 语言一样,Swift 使用变量来进行存储并通过变量名来关联值。在 Swift 中,广泛的使用着值不可变的变量,它们就是常量,而且比 C 语言的常量更强大。在 Swift 中,如果你要处理的值不需要改变,那使用常量可以让你的代码更加安全并且更清晰地表达你的意图。

除了我们熟悉的类型,Swift 还增加了 Objective-C 中没有的高阶数据类型比如元组(Tuple)。元组可以让你创建或者传递一组数据,比如作为函数的返回值时,你可以用一个元组可以返回多个值。

Swift 还增加了可选(Optional)类型,用于处理值缺失的情况。可选表示“那儿有一个值,并且它等于 x ”或者“那儿没有值”。可选有点像在 Objective-C 中使用nil,但是它可以用在任何类型上,不仅仅是类。可选类型比 Objective-C 中的nil指针更加安全也更具表现力,它是 Swift 许多强大特性的重要组成部分。

Swift 是一门类型安全的语言,可选类型就是一个很好的例子。Swift 可以让你清楚地知道值的类型。如果你的代码期望得到一个String,类型安全会阻止你不小心传入一个Int。你可以在开发阶段尽早发现并修正错误。

常量和变量

常量和变量把一个名字(比如maximumNumberOfLoginAttempts或者welcomeMessage)和一个指定类型的值(比如数字10或者字符串"Hello")关联起来。常量的值一旦设定就不能改变,而变量的值可以随意更改。

声明常量和变量

常量和变量必须在使用前声明,用let来声明常量,用var来声明变量。下面的例子展示了如何用常量和变量来记录用户尝试登录的次数:

let maximumNumberOfLoginAttempts = 10
var currentLoginAttempt = 0

这两行代码可以被理解为:

“声明一个名字是maximumNumberOfLoginAttempts的新常量,并给它一个值10。然后,声明一个名字是currentLoginAttempt的变量并将它的值初始化为0。”

在这个例子中,允许的最大尝试登录次数被声明为一个常量,因为这个值不会改变。当前尝试登录次数被声明为一个变量,因为每次尝试登录失败的时候都需要增加这个值。

你可以在一行中声明多个常量或者多个变量,用逗号隔开:

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

注意:
如果你的代码中有不需要改变的值,请使用let关键字将它声明为常量。只将需要改变的值声明为变量。

类型标注

当你声明常量或者变量的时候可以加上类型标注(type annotation),说明常量或者变量中要存储的值的类型。如果要添加类型标注,需要在常量或者变量名后面加上一个冒号和空格,然后加上类型名称。

这个例子给welcomeMessage变量添加了类型标注,表示这个变量可以存储String类型的值:

var welcomeMessage: String

声明中的冒号代表着“是...类型”,所以这行代码可以被理解为:

“声明一个类型为String,名字为welcomeMessage的变量。”

“类型为String”的意思是“可以存储任意String类型的值。”

welcomeMessage变量现在可以被设置成任意字符串:

welcomeMessage = "Hello"

你可以在一行中定义多个同样类型的变量,用逗号分割,并在最后一个变量名之后添加类型标注:

var red, green, blue: Double

注意:
一般来说你很少需要写类型标注。如果你在声明常量或者变量的时候赋了一个初始值,Swift可以推断出这个常量或者变量的类型,请参考类型安全和类型推断。在上面的例子中,没有给welcomeMessage赋初始值,所以变量welcomeMessage的类型是通过一个类型标注指定的,而不是通过初始值推断的。

常量和变量的命名

你可以用任何你喜欢的字符作为常量和变量名,包括 Unicode 字符:

常量与变量名不能包含数学符号,箭头,保留的(或者非法的)Unicode 码位,连线与制表符。也不能以数字开头,但是可以在常量与变量名的其他地方包含数字。

一旦你将常量或者变量声明为确定的类型,你就不能使用相同的名字再次进行声明,或者改变其存储的值的类型。同时,你也不能将常量与变量进行互转。

注意:
如果你需要使用与Swift保留关键字相同的名称作为常量或者变量名,你可以使用反引号(`)将关键字包围的方式将其作为名字使用。无论如何,你应当避免使用关键字作为常量或变量名,除非你别无选择。

你可以更改现有的变量值为其他同类型的值,在下面的例子中,friendlyWelcome的值从"Hello!"改为了"Bonjour!":

var friendlyWelcome = "Hello!"
friendlyWelcome = "Bonjour!"
// friendlyWelcome 现在是 "Bonjour!"

与变量不同,常量的值一旦被确定就不能更改了。尝试这样做会导致编译时报错:

let languageName = "Swift"
languageName = "Swift++"
// 这会报编译时错误 - languageName 不可改变

输出常量和变量

你可以用print(_:separator:terminator:)函数来输出当前常量或变量的值:

print(friendlyWelcome)
// 输出 "Bonjour!"

print(_:separator:terminator:)是一个用来输出一个或多个值到适当输出区的全局函数。如果你用 Xcode,print(_:separator:terminator:)将会输出内容到“console”面板上。separatorterminator参数具有默认值,因此你调用这个函数的时候可以忽略它们。默认情况下,该函数通过添加换行符来结束当前行。如果不想换行,可以传递一个空字符串给terminator参数--例如,print(someValue, terminator:"")。关于参数默认值的更多信息,请参考默认参数值。

Swift 用字符串插值(string interpolation)的方式把常量名或者变量名当做占位符加入到长字符串中,Swift 会用当前常量或变量的值替换这些占位符。将常量或变量名放入圆括号中,并在开括号前使用反斜杠将其转义:

print("The current value of friendlyWelcome is \(friendlyWelcome)")
// 输出 "The current value of friendlyWelcome is Bonjour!

注释

请将你的代码中的非执行文本注释成提示或者笔记以方便你将来阅读。Swift 的编译器将会在编译代码时自动忽略掉注释部分。

Swift 中的注释与 C 语言的注释非常相似。单行注释以双正斜杠(//)作为起始标记:

// 这是一个注释

你也可以进行多行注释,其起始标记为单个正斜杠后跟随一个星号(/*),终止标记为一个星号后跟随单个正斜杠(*/):

/* 这是一个,
多行注释 */

与 C 语言多行注释不同,Swift 的多行注释可以嵌套在其它的多行注释之中。你可以先生成一个多行注释块,然后在这个注释块之中再嵌套成第二个多行注释。终止注释时先插入第二个注释块的终止标记,然后再插入第一个注释块的终止标记:

/* 这是第一个多行注释的开头
/* 这是第二个被嵌套的多行注释 */
这是第一个多行注释的结尾 */

通过运用嵌套多行注释,你可以快速方便的注释掉一大段代码,即使这段代码之中已经含有了多行注释块。

分号

与其他大部分编程语言不同,Swift 并不强制要求你在每条语句的结尾处使用分号(;),当然,你也可以按照你自己的习惯添加分号。有一种情况下必须要用分号,即你打算在同一行内写多条独立的语句:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/248093.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Saiku Table展示数据合并bug修复(二十五)

Saiku Table展示数据合并bug修复 Saiku以table的形式展示数据,如果点击了 非空的字段 按钮,则会自动进行数据合并,为空的数据行以及数据列都会自动隐藏掉。 首先我们应该定位问题: 1.查看接口返回值,会发现接口返回都正…

软件开发工具(第2章:软件开发过程及其组织)

一、软件开发的困难 程序员做好软件工作的关键是什么? 关键是两个转换: 第一个转换是用户对软件功能的理解与程序员对软件功能的理解之间的转换。 (不同⾏业的⼈员对于事物的认识⽅法与描述⽅法是不同的。) 第二个转换要解决的是人…

数据可视化(BI报表的开发)第四天

练习题: 先找出字符串 ‘8587263747153203552943982’ 中出现次数最多的数字及次数,然后去重后并排序(不准使用sort),使得到结果为 ‘0123456789’。 要求1:找到出现最多的数字和出现的次数 // 1、找出出…

Swift傻傻分不清楚系列(二)数据类型

本页包含内容: 整数整数范围IntUInt浮点数类型安全和类型推断数值型字面量数值型类型转换整数转换数整数和浮点数转换类型别名布尔值 整数 整数就是没有小数部分的数字,比如42和-23。整数可以是有符号(正、负、零)或者无符号&…

Python打卡第四周

这一周鸽了好久, 因为最近在准备比赛。课程一直没跟上。。。 今天整理完本周的知识之后休息一周复习之前的 好了。 上总结 第一天 装饰器定义函数bar,在foo中调用 # def foo(): # # print(in the foo) # # bar() # # foo()def bar():print(in th…

网络经济与企业管理(第 1 章:企业管理概论)

一、企业的概念 什么是企业? 1.企业以市场为导向,以价值增值作为经济活动的目的 2.企业是从事商品生产和流通的经济组织 3.企业经营过程中要自主经营、自负盈亏、独立核算和承担风险,具有法人资格的基本经济单位 企业发展的三个时期&#xff…

js高级 — ES6

ECMAScript 6 目标:学习完 ES6 可以掌握方便后续的开发,未来工作中大量使用 ES6 开发 ECMAScript 6 介绍ECMAScript 6 新增语法内置对象的扩展ECMAScript 6 降级处理(学习完node再讲) 1. ECMAScript 6 介绍 ES – ECMAScript …

Swift傻傻分不清楚系列(三)元组与可选类型

本页包含内容: 元组可选nilif 语句以及强制解析可选绑定隐式解析可选类型错误处理断言 元组 元组(tuples)把多个值组合成一个复合值。元组内的值可以是任意类型,并不要求是相同类型。 下面这个例子中,(404, "Not…

去死吧!USB转串口!!!

首先,这个题目有两种歧义:1、USB转232串口(严格说就是这种)! 2、USB转USART串口(通常都是这么叫,认为就是这,理论上是错误的,歧义所在)! USB转TTL…

IDEA微服务项目的application.yml没有绿色叶子的解决办法

1.今天在写微服务项目的时候成功入坑,那么问题是啥呢?接下来和我一起走入bug的世界吧,让我们看看究竟是怎么回事。 *问题描述    1.application.yml是灰色的小格子 2.实在难看 *需要解决的最终结果 1.有绿色的小叶子 解决方案上图 1. 2. …

Ajax — 第一天

上网的目的 本质目的:浏览和消费资源 资源:文字、图片、音频、视频…资源存在哪里:服务器上 服务器的概念 是负责存放和对外提供资源的电脑。它的性能比普通的计算机好太多了 客户端 获取和消费资源的电脑,叫做客户端。 我…

linux 查看进程

1.ps 各字段含义 如果让程序始终在后台执行,即使关闭当前的终端也执行(之前的&做不到),这时候需要nohup。 该命令可以在你退出帐户/关闭终端之后继续运行相应的进程。关闭中断后,在另一个终端jobs已经无法看到后台…

Swift傻傻分不清楚系列(四)基本运算符 o_O!???

本页包含内容: 术语赋值运算符算术运算符组合赋值运算符比较运算符三目运算符空合运算符区间运算符逻辑运算符 运算符是检查、改变、合并值的特殊符号或短语。例如,加号()将两个数相加(如 let i 1 2)。更…

网络经济与企业管理(第 2 章:企业战略管理)

一、战略的性质与类型 什么是战略:企业发展的谋划 企业战略的三个层次: 企业总体战略:又称经营战略,是企业整体运营的指导思想事业层战略:又称竞争战略、业务层次战略、SBU战略, 指导具体战略经营单位。职能…

Ajax — 图书管理

注意&#xff1a;本项目基于 jQuery 文件下进行的 Ajax 请求项目&#xff0c;需要映入jQuery文件&#xff01; <body style"padding: 15px;"><!-- 添加图书的Panel面板 --><div class"panel panel-primary"><div class"panel-h…

vue动态加载组件

vue动态加载组件&#xff0c;可以使用以下方式 <component :is"propertyname" v-for"tab in tabs"></component> :is必须是指向data里面的变量&#xff0c;如果使用is"proname"&#xff0c;那么is指向的名称&#xff0c;必须在compo…

Swift傻傻分不清楚系列(五) 字符串和字符

本页包含内容&#xff1a; 字符串字面量初始化空字符串字符串可变性字符串是值类型使用字符连接字符串和字符字符串插值Unicode计算字符数量访问和修改字符串比较字符串字符串的 Unicode 表示形式 String是例如"hello, world"&#xff0c;"albatross"这样…

错误: 找不到或无法加载主类 com.leyou.LeyouItemApplication Process finished with exit code 1...

在IDEA的使用过程中&#xff0c;经常断掉服务或者重启服务&#xff0c;最近断掉服务重启时突然遇到了一个启动报错&#xff1a; 错误&#xff1a;找不到或无法加载主类 猜测&#xff1a;1&#xff0c;未能成功编译&#xff1b; 尝试&#xff1a;菜单---》Build---》Rebuild Pro…

Ajax — 第二天

Ajax-02 今天内容&#xff1a; 安装浏览器插件 聊天机器人案例 Form表单提交 模板引擎&#xff08;新的概念&#xff0c;难点&#xff09; 两个案例 Chrome浏览器插件安装 安装步骤 下载插件的网站&#xff1a; https://www.gugeapps.net/ 无需扫码 http://www.cnplu…

PC办公必备软件

Everything &#xff1a;基于名称快速定位文件和文件夹https://www.voidtools.com/zh-cn/ Notepad &#xff1a; a free (as in "free speech" and also as in "free beer") source code editor and Notepad replacement that supports several languagesh…