• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

Swift5.4教程(一)--常量和变量

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

本次的教程是基于Swift5.4版本

Swift是一个全新的用户iOS,MacOS,watchOS和tvOS的应用编程语言。如果你有C和Objective-C开发经验的话,Swift的许多部门会让你很熟悉。

Swift 为所有 C 和 Objective-C 的类型提供了自己的版本,包括整型值的 Int ,浮点数值的 Double 和 Float ,布尔量值的 Bool ,字符串值的 String 。如同集合类型中描述的那样, Swift 同样也为三个主要的集合类型提供了更高效的版本, Array , Set 和 Dictionary 。

除了我们熟悉的类型之外,Swift还增加了Objective-C 中没有的类型,元组。元组允许你创建和传递一组的数据,你可以用元组当做函数的返回值来返回多个的值

Swift还增加了可选项,用来处理没有值的情况,它使得Swift更安全,这也充分说明swift是一门类型安全的编程语言,那么现在让我们开始swift的编程之旅吧

常量和变量

顾名思义,常量的值一旦设置好便不能再被更改,然而变量的值可以在将来被设置成不同的值

声明常量和变量

常量和变量必须在使用前被申明,使用关键字 let 来声明常量,使用关键字 var 来声明变量。下面是声明的一个例子

let heigh = 10      //声明一个常量 不能被修改,否则会编译错误
var weight = 10     //声明一个变量 后期可以修改

类型标注

你可以在声明一个常量或者变量的时候提供类型标注,用来确认常量或者变量能够存储值的类型。添加类型标注的方式是在常量或者变量的后面加一个冒号,然后加上一个空格,最后加上要使用的类型的名称。下面举个例子:

var name: String = "dapeng" //声明一个String类型的变量name

输出常量和变量

你可以使用 print(_:separator:terminator:) 函数来打印当前常量和变量中的值。

var name: String = "dapeng"
print(name)
//输出 dapeng

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

var name: String = "dapeng"
print("\(name) is very good")
//输出 dapeng is very good

注释

使用注释来将不需要执行的文本放入的代码当中,作为标记或者你自己的提醒。当 Swift 编译器在编译代码的时候会忽略掉你的注释。swift的注释和c的注释基本相同,下面是例子

1.单行注释

// 这是一个注释

2.多行注释

/* this is also a comment,
but written over multiple lines */

分号

和许多其他的语言不同,Swift 并不要求你在每一句代码结尾写分号( ; ),当然如果你想写的话也没问题。总之,如果你想在一行里写多句代码,分号还是需要的

let cat = "mao"
var dog = "dog"
var people = "people";var student = "student"

类型安全和类型推断

Swift 是一门类型安全的语言。类型安全的语言可以让你清楚地知道代码可以处理的值的类型。如果你的一部分代码期望获得 String ,你就不能错误的传给它一个 Int 。

举个例子,如果你给一个新的常量设定一个 42 的字面量,而且没有说它的类型是什么,Swift 会推断这个常量的类型是 Int ,因为你给这个常量初始化为一个看起来像是一个整数的数字

let meaningOfLife = 42
// meaningOfLife is inferred to be of type Int

因为 Swift 是类型安全的,他在编译代码的时候会进行类型检查,任何不匹配的类型都会被标记为错误。这会帮助你在开发阶段更早的发现并修复错误。

数值型字面量

整数型字面量可以写作:

  1. 一个十进制数,没有前缀
  2. 一个二进制数,前缀是 0b
  3. 一个八进制数,前缀是 0o
  4. 一个十六进制数,前缀是 0x

类型别名

类型别名可以为已经存在的类型定义了一个新的可选名字。用 typealias 关键字定义类型别名。

typealias mInt = Int
var age:mInt = 10
var age:Int = 10
//以上两种age的声明是等同的

元组

元组把多个值合并成单一的复合型的值。元组内的值可以是任何类型,而且可以不必是同一类型。

在下面的示例中, (404, “Not Found”) 是一个描述了 HTTP 状态代码 的元组。HTTP 状态代码是当你请求网页的时候 web 服务器返回的一个特殊值。当你请求不存在的网页时,就会返回 404 Not Found

let http404Error = (404, "Not Found")
// http404Error is of type (Int, String), and equals (404, "Not Found")

(404, “Not Found”) 元组把一个 Int 和一个 String 组合起来表示 HTTP 状态代码的两种不同的值:数字和人类可读的描述。他可以被描述为“一个类型为 (Int, String) 的元组”

任何类型的排列都可以被用来创建一个元组,他可以包含任意多的类型。例如 (Int, Int, Int) 或者 (String, Bool) ,实际上,任何类型的组合都是可以的。

你也可以将一个元组的内容分解成单独的常量或变量,这样你就可以正常的使用它们了:

let (statusCode, statusMessage) = http404Error
print("The status code is \(statusCode)")
// prints "The status code is 404"
print("The status message is \(statusMessage)")
// prints "The status message is Not Found"

当你分解元组的时候,如果只需要使用其中的一部分数据,不需要的数据可以用下滑线( _ )代替:

let (justTheStatusCode, _) = http404Error
print("The status code is \(justTheStatusCode)")
// prints "The status code is 404"

另外一种方法就是利用从零开始的索引数字访问元组中的单独元素:

print("The status code is \(http404Error.0)")
// prints "The status code is 404"
print("The status message is \(http404Error.1)")
// prints "The status message is Not Found"

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

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

在命名之后,你就可以通过访问名字来获取元素的值了:

print("The status code is \(http200Status.statusCode)")
// prints "The status code is 200"
print("The status message is \(http200Status.description)")
// prints "The status message is OK"

作为函数返回值时,元组非常有用。一个用来获取网页的函数可能会返回一个 (Int, String) 元组来描述是否获取成功。相比只能返回一个类型的值,元组能包含两个不同类型值,他可以让函数的返回信息更有用。

可选项

可以利用可选项来处理值可能缺失的情况。可选项意味着:这里有一个值,它等于X或者这里根本没有值

首先明确的一个概念

  1. Objective-C中的nil:表示缺少一个合法的对象,是指向不存在对象的指针,对结构体、枚举等类型不起作用(会返回NSNotFound)
  2. Swift中的nil:表示任意类型的值缺失,是一个确定的值,要么是该类型的一个值要么什么都没有(即为nil)

在Swift中Optional(可选类型)是一个含有两种情况的枚举,None 和 Some(T),用来表示可能有或可能没有值。任何类型都可以明确声明为(或者隐式转换)可选类型。当声明一个可选类型的时候,要确保用括号给 ? 操作符一个合适的范围。

  • 可选类型的声明
var optionalStr: String? = "swift语言可选类型"//声明可选类型字符串,并赋初值
var opStu:Student? //声明可选opStu对象,赋初值nil

注意:在类型和 ?之间没有空格

  • 强制解析
    当你确定自定义的可选类型一定有值时,可以使用操作符(!)进行强制解析,拿到数据,叹号表示”我知道一定有值,请使用它”,但是当你判断错误,可选值为nil时使用(!)进行强制解析,会有运行错误。
var myValue:String? = nil
myValue="强制解析,一定有值"
if myValue != nil {
print(myValue!)//使用!进行强制解析
}else{
print("字符串为nil")
}
  • 可选项绑定
    使用可选绑定,摆脱了频繁的判断是否为nil在赋值,但是使用可选绑定(optional binding)来判断可选类型是否包含值,如果包含就把值赋给一个临时常量或者变量。可选绑定可以用在if和while语句中来对可选类型的值进行判断并把值赋给一个常量或者变量。

  • 格式

if let tempStr = someOptional{
tempStr//如果someOptiona有值的话,就会赋值给tempStr,然后使用
}
var myStr:String?
myStr="可选绑定的值"
if  let tempStr = myStr { //如果希望修改tempStr的值,可以定义成var
print(tempStr)
}else{
print("字符串为nil")
}

  • 隐式展开可选项
    在最初的声明时使用?修饰,当你希望它自动解析是可以用!代替?来修饰,这样在变量使用时就不需要加!来强制拆包,它会自动解析
let possibleString: String? = "An optional string."
let forcedString: String = possibleString! // requires an exclamation mark

let assumedString: String! = "An implicitly unwrapped optional string."
let implicitString: String = assumedString // no need for an exclamation mark

print(implicitString)

备注:教程中有关Int Double Float Bool 类型没有做详细的介绍,需要了解的小伙伴可以访问苹果开发文档中心查看相关的文档





鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
Swift 对比学习 (一)发布时间:2022-07-13
下一篇:
swift委托代理传值发布时间:2022-07-13
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap