当前位置: 首页 > news >正文

Swift常量与变量

常量和变量都有一个名字来关联一个特定类型的值。常量的值一旦被设置就不能更改,然后变量的值被设置后,反后还可以设置其它不同的值。

定义常量和变量

常量和变量在被使用之前必须先声明。你可以用let关键字来声明一个常量,用var关键字来声明一个变量。这里我们一个关于如何用常量和变量记录跟踪用户偿试登录次数的例子

let maximumNumberOfLoginAttempts = 10(用常量记录最大登录次数)

var currentLoginAttempt = 0(用变量当前用户登录次数)

这段代码分析如下:

声明了一个叫maximumNumberOfLoginAttempts的新常量,并给它设置了一个值10。然后,又声明了一个叫currentLoginAttempt的新变量,并给它设置了一个初始值0。

在这个例子中,允许尝试登录的最大次数被声明为一个常量,因为最在登录次数从来不会被改变。当前尝试登录记数被声明为一个变量,因为每次尝试登录失败后这个值必须被增加1.

你也可以声明多个常量和多个变量在同一行内,通过逗号分隔。

例如:var x = 0.0, y = 0.0, z = 0.0

注意:

      如果在你代码里的一些值不会发生改变,总是以let关键字来创建一个常量来存储。用变量来存储一些需要可能发生改变的值。

类型注释

你可以在声明一个常量和变量时提供一个类型限制,能清楚知道这种常量和变量能存储什么样的值。通过在一个常量或者变量名后边加一个冒号(:)和在冒号后边写上具体的类型注释

下边这个例子为一个名叫welcomeMessage的变量提供了一个类型注释,它表明了这个变量用来存储一个字符串(String)值。

            var welcomeMessage: String

在这个声明中的冒号的意思是“...的类型为...”,所以上边的代码的意思是:

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

这种写法,意味着只能存储字符串值。

welcomeMessage变量现在能设置任何一个字符串类型的值而没有错误

welcomeMessage = "Hello"

你也可以在同一行中定义多个类型一样联系在一起的变量,通过逗号来分开他他们,在最后一个变量名后加一个类型注释:

    var red,green,bule: Double

注意: 在实际中你很少需要写类型注释。如果你定义一个变量或常量时提供一个初始值,Swift总能够推断出常量或者变量的类型,像在类型安全和类型推断小节中描述的一样。在welcomeMessage这个例子中,没有提供初始值,所以变量welcomeMessage指明具体类型注释还不如通过初始值来自动推断。

常量和变量的命名

常量和变量的名字可以包含任何字符和Unicode字符

  let​ ​π​ = ​3.14159
​  let​ ​你好​ = ​"你好世界"
​  let​ ​??​ = ​"dogcow”

常量和变量名不能包含空格字符,数字符号,箭头,私有用户Unicode点,线,框绘图字符。也不能以数字开头,然后数字可以包含到名字里的任何地方。

一旦你定义了一个确定类型的常量或变量,你就不会在重复定义一个名字一样的常量或变量,或者用不同类型的值去改变它。也不能把一个常量改变为一个变量或者把一个变量改变为一个常量。

注意:如果你需要把一个常量或一个变量的名字和Swift的保留关键字一样,需要用小括号(`)把名字括起来作为常量或者变量的名字。无论如何应避免用关键字作为常量或变量的名字除非你确实没有更好的选择。

你可以用另外一个类型相同的值来更改一个变量已存在的值。在下边这个例子中friendlyWelcome的值从"hello!"改变为"Bonjour!":

         var friendlyWelcome = "hello!"

         friendlyWelcome = "Bonjour!"

        // 现在friendlyWelcome的值为"Bonjour!"

和变量不一样,常量的值一旦被设置,那么它的值就不能更改。尝试更改常量的值在你的代码被编译时会报告出一个错误:

       let languageName = "Swift"

       languageName = "Swift++"

      //这是一个编译时错误--languageName不能被更改

打印常量和变量

你可以用println函数打印出变量或常量的当前值:

    println(friendlyWelcome)

    //打印出 "Bonjour!"

println是一个用来打印输出值的一个全局函数,并输出一个换行跳出。在Xcode中,例如,println在一个名叫控制台("Console")的面板中输出结果。(另外一个函数叫print,和printl完成一样的任务只是在打印的值的末尾没有追加换行跳出)

println函数可以打印出你传递给他的任意字符串:

    println("This is a string")

    //打印输出 "This is a string"

println函数能够打印出更完整的记录信息,和Cocoa的NSLog函数的风格相似。这些消息可以包含常量或变量的当前值。

Swift可以使用并支持一些插入包含常量或变量的名字作为一个占位符的字符串,占位符为来提示Swift用常量或变量的当前值来替换相应的地方。把常量或变量的名字放到小个回括号()中,并在圆括号()前加一个反杠“\”来构造一个占位符。

     println("The current value of friendlyWelcome is \(friendlyWecome)")

     //打印输出  "The current value of friendlyWelcome is Bonjour!"

注意:关于字符串的插补的所有选项操作在”字符串插入“小节中详细讲解和说明。

 

 

 

 

 

转载于:https://www.cnblogs.com/nj20091571/p/4394141.html

相关文章:

  • 网站SEO知识
  • 【最大流,二分图匹配】【hdu2063】【过山车】
  • 嚣张,LG叫板HTC VIVE!VR设备又添新成员
  • CCNP路由-18 BGP路径属性详解(上)
  • 大侠唐在飞 《实战juniper入门课程》
  • jboss规则引擎KIE Drools 6.3.0-高级讲授篇
  • 恶意网络通信-您忽略了什么?
  • mysql read commited 和 REPEATABLE read 原因
  • HDU1874 畅通工程续
  • IP一些基础知识
  • 本IT博客用于域名投资、互联网、资源下载等相关干货收藏和学习
  • 杭电2043,小细节。。。。。
  • Springspring事务管理几种方式[转]
  • 一天干掉一只Monkey计划(一)——基本光照模型及RT后处理 【转】
  • LinkedHashSet的实现原理
  • Gradle 5.0 正式版发布
  • JavaScript设计模式之工厂模式
  • java第三方包学习之lombok
  • Java知识点总结(JDBC-连接步骤及CRUD)
  • Linux中的硬链接与软链接
  • PV统计优化设计
  • Python socket服务器端、客户端传送信息
  • React Transition Group -- Transition 组件
  • Redis提升并发能力 | 从0开始构建SpringCloud微服务(2)
  • vue-loader 源码解析系列之 selector
  • 闭包,sync使用细节
  • 测试如何在敏捷团队中工作?
  • 回顾 Swift 多平台移植进度 #2
  • 记一次删除Git记录中的大文件的过程
  • 将回调地狱按在地上摩擦的Promise
  • 聊聊flink的TableFactory
  • 爬虫进阶 -- 神级程序员:让你的爬虫就像人类的用户行为!
  • 设计模式走一遍---观察者模式
  • 算法之不定期更新(一)(2018-04-12)
  • 通过来模仿稀土掘金个人页面的布局来学习使用CoordinatorLayout
  • ​一、什么是射频识别?二、射频识别系统组成及工作原理三、射频识别系统分类四、RFID与物联网​
  • #1014 : Trie树
  • #我与虚拟机的故事#连载20:周志明虚拟机第 3 版:到底值不值得买?
  • $分析了六十多年间100万字的政府工作报告,我看到了这样的变迁
  • (10)工业界推荐系统-小红书推荐场景及内部实践【排序模型的特征】
  • (2)MFC+openGL单文档框架glFrame
  • (ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY)讲解
  • (Spark3.2.0)Spark SQL 初探: 使用大数据分析2000万KF数据
  • (差分)胡桃爱原石
  • (更新)A股上市公司华证ESG评级得分稳健性校验ESG得分年均值中位数(2009-2023年.12)
  • (十二)springboot实战——SSE服务推送事件案例实现
  • (十六)一篇文章学会Java的常用API
  • (一)VirtualBox安装增强功能
  • (原創) 是否该学PetShop将Model和BLL分开? (.NET) (N-Tier) (PetShop) (OO)
  • (转)Google的Objective-C编码规范
  • (转)visual stdio 书签功能介绍
  • .bat批处理(四):路径相关%cd%和%~dp0的区别
  • .NET 4.0中的泛型协变和反变
  • .net core MVC 通过 Filters 过滤器拦截请求及响应内容
  • .NET Core 通过 Ef Core 操作 Mysql