Swift初探01 变量与控制流

Swift初探01 变量与控制流

输出"hello world"是几乎学习全部编程语言的第一课,这是程序员的情怀。程序员

因此咱们学习swift的第一步,就是输出一句"Hello, world"编程

print("Hello, world!")

在swift里,咱们不须要C语言的main函数,也不须要和Java同样,上来就须要写一个class和一个main,咱们甚至不须要为了输入输出或者字符串处理导入一个单独的库。swift

在全局做用域中的代码会被自动看成程序的入口点。数组

01 简单值

  • let来声明常量
  • var来声明变量

和其余语言同样,常量必须且只能赋值一次,而且必须在声明的时候进行赋值。app

var variable = 250
variable = 99
let constant = 32

虽然咱们在写的时候没有声明变量的类型,可是并不意味着swift就是一门弱类型语言,swift是强类型的。编程语言

swift有一个自动推断机制,在你经过一个值来声明一个常量或者变量的时候,编译器会自动推断类型。而且在以后的赋值修改中,不能够直接的换成另外一个数据类型!函数

好比上面的声明中,swift经过var variable = 250已经推断出该变量是整型。学习

其实真正的声明是这样的:code

var variable: String = "hello swift"
let constant: Double = 12
type(of: variable) // String.Type
type(of: constant) // Double.Type

swift中,值永远不会被隐式转换为其余类型。若是须要把一个值转换成其余类型,请显式转换。orm

例如:String(variable)便可将variable变量转化为字符串类型。

或者使用:let apple: String = "\(variable)"。(这种写法我的比较推荐)

咱们还能够使用三引号""" """来包裹一个多行的字符串内容:

let apple = 666
let quotation = """
    徐航宇
真的"\(apples)"
"""

这里官方文档写的是:每行行首的缩进会被去除,直到和结尾引号的缩进相匹配。

其实我我的没太看懂,由于每行行首的缩进是真实存在的,在输出时也是存在的。

数组和字典能够使用方括号 [] 来建立,并使用下标或者键(key)来访问元素(最后一个元素后面容许有个逗号):

var shoppingList = ["可乐", "薯片", "炸鸡"]
shoppingList[1] = "农夫山泉"

var occupations = [
    "徐航宇": "武汉",
    "刘好": "山西",
]
occupations["aha"] = "ala"

这里注意,字典类型是能够直接经过[key]来添加元素的,可是数组是不能够直接这样添加的,必须使用append()或者其余方法来添加:

shoppingList.append("百岁山")
print(shoppingList) // 数组在添加元素时会自动变大

使用初始化语法来建立一个空数组或者空字典:

let emptyArray = [String]()
let emptyDictionary = [String: Float]()

一样能够使用类型推断来建立空数组和空字典:

shoppingList = []
occupations = [:]

好像不能够经过类型推断建立空的变量:

var a // 报错
var b: Int // 不报错

02 控制流

  • 使用 ifswitch 来进行条件操做
  • 使用 for-inwhilerepeat-while 来进行循环迭代

包裹条件和循环变量的括号能够省略(建议保留,加强可读性),可是语句体的大括号是必须的:

let individualScores = [75, 43, 103, 87, 12]
var teamScore = 0
for score in individualScores {
    if score > 50 {
        teamScore += 3
    } else {
        teamScore += 1
    }
}
print(teamScore)

if 语句中,条件必须是一个布尔表达式,若是是一个别的数值,就像刚刚提到过的——swift不会本身作隐形转换,该值不会隐形地与 0 作对比得出一个布尔值(可是会获得一个报错)。

这个时候若是咱们这样来写:

var optionalName: String? = "徐航宇"
var greeting = "Hello!"
if let name = optionalName {
  greeting = "Hello, \(name)"
}
print(greeting)

这里if+let有什么用呢?

这个?表述的是可选类型,也就是说,能够同时值为nil和制定类型的变量类型。

若是这个地方optionalName不是nil,那么就会将值赋给前面let的常量name,而且能够继续执行大括号中的代码;若是他是nil,那么这个位置会被断定为false,什么也不操做,而且跳过大括号中的代码。

合并空值运算符也是能够处理nil值一种方法:

let nickName: String? = nil
let fullName: String = "John Appleseed"
let informalGreeting = "Hi \(nickName ?? fullName)"

若是??前的值是nil,那么会取后面的值;若是不是nil,那么将会取他本身的值。也就是后面的值至关于默认值。

这里最后在谈一下可选类型。

首先,如何使用可选类型?

  • var a:Int? = 10 // print结果为:Optional(10)
  • 若输入var a:Int = nil或是var a = nil // 会报错。
  • var a:Int? = nil // print结果为:nil

能够看到,可选类型通常用于处理值缺失的状况。

若变量在运算或者输出时有合适的值,则输出值;若没有合适的值,则输出? =后的值。

那么如何取出Optional的值?

使用 ! 能够取出真实值:

var a:Int? = nill

a = 10
print(a) // Optional(10)
print(a!) // 10

var b:Int? = nil
print(b!) // 报错

隐式展开

若是直接肯定了该变量必然有值,能够用 ! 代替 ? 。

var a:Int! = 5

print(a) // 输出5,而不是Optional(5)

记住,nil也是一种值。

var a:String? = "hello world"

if(a == nil){
	print("nil也是一种值")
} else {
  print("a的值为空,此时使用" + a + "来替代") // 报错
  print("a的值为空,此时使用" + a! + "来替代") // hello world
}

注意:a的值为可选类型Optional("hello world"),须要使用 ! 取出真实值。

当咱们使a = nil时,发现输出nil也是一种值;当咱们什么也不写时,输出a的值为空,此时使用hello world来替代

关于可选类型绑定

能够使用如下方法快捷赋值:

var a:Int? = nil

if let value = a{ // 也能够用var

	print(value)

} else {

	print("value没被赋值")

}

PS: value的做用域只在 if{} 之中。

相关文章
相关标签/搜索