首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Swift教程(一)--基础内容

Swift教程(一)--基础内容

作者头像
roc
发布2019-07-31 09:44:07
1.2K0
发布2019-07-31 09:44:07
举报
文章被收录于专栏:iOS开发笔记iOS开发笔记

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

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)
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-06-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 iOS开发笔记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 常量和变量
  • 声明常量和变量
  • 类型标注
  • 输出常量和变量
  • 注释
  • 分号
  • 类型安全和类型推断
  • 数值型字面量
  • 类型别名
  • 元组
  • 可选项
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档