Swift学习笔记1——基础部分


  
  
参考资料:

The Swift Programming Language 中文版


SwiftV课堂 (各种swift视频教程,绝大部分免费得,强烈推荐)

swiftist (swift论坛)

下面开始

常量与变量
swift中可以用let定义常量,var定义变量
let a = "hello"
var b = “hello"

可以不指定常量或变量类型,这样就会有一个问题:
var a = 0
a += 3.14
println(a) //输出3
这是因为var a = 0 时swift自动给a设置为int型,后面都是以int型来计算和输出
不过swift可以指定类型:
var a:Float = 0
a += 3.14
println(a)//输出3.14
或者:
var b = 0.0
b += 3.14
println(b)//输出3.14
注意:

一般来说你很少需要写类型标注。如果你在声明常量或者变量的时候赋了一个初始值,Swift可以推断出这个常量或者变量的类型,如果没有赋初始值,最好指定类型


命名

还可以这样命名,好吧,实际项目中没人会这样做吧
<span style="font-size:18px;">let π = 3.14159
let 你好 = "你好世界"
let  = “dog cow”</span>

你可以在一行中声明多个常量或者多个变量,用逗号隔开:
<span style="font-size:18px;">var x = 0.0, y = 0.0, z = 0.0</span>
print函数
字符拼接好方便:
var height = 175
var age    = 24
println("身高是\(height),体重是\(age)")//输出 身高是175,体重是24
JAVA得这样
int height = 175;
int age    = 24;
System.out.println("身高是"+height+",体重是"+age);//输出 身高是175,体重是24

注释

<span style="font-size:18px;">//这是一个注释

/*这是一个注释*/

/*
    //这是一个注释
    /*这也是一个注释*/
*/</span>

数值

数值类字面量可以包括额外的格式来增强可读性。整数和浮点数都可以添加额外的零并且包含下划线,并不会影响字面量:

let paddedDouble = 000123.456 
let oneMillion = 1_000_000 
let justOverOneMillion = 1_000_000.000_000_1

运算时需转成同一类型

let twoThousand: UInt16 = 2_000
let one: UInt8 = 1
let twoThousandAndOne = twoThousand + UInt16(one)

整数和浮点数的转换必须显式指定类型:

let three = 3
let pointOneFourOneFiveNine = 0.14159
let pi = Double(three) + pointOneFourOneFiveNine
// pi 等于 3.14159,所以被推测为 Double 类型

元组

这是一个非常有趣的数据结构,想不出在JAVA中有什么相似的数据结构。

<span style="font-size:18px;">let http404Error = (404, "Not Found")
// http404Error 的类型是 (Int, String),值是 (404, "Not Found")</span>

咋一看,有点像HashMap数据结构,但是元组并不是key,value来对应的,而且可以有多个数值:

let a = (124,1725,"pkxutao")

并且只有一组,不像HashMap那样是一个数据集合。

你可以将一个元组的内容分解(decompose)成单独的常量和变量,然后你就可以正常使用它们了:

<span style="font-size:18px;">let http404Error = (404, "Not Found") // http404Error 的类型是 (Int, String),值是 (404, "Not Found") 
let (statusCode, statusMessage) = http404Error println("The status code is \(statusCode)") // 输出 "The status code is 404" 
println("The status message is \(statusMessage)") // 输出 "The status message is Not Found"</span>

如果你只需要一部分元组值,分解的时候可以把要忽略的部分用下划线( _ )标记:

<span style="font-size:18px;">let http404Error = (404, "Not Found")
// http404Error 的类型是 (Int, String),值是 (404, "Not Found")
let (justTheStatusCode, _) = http404Error
println("The status code is \(justTheStatusCode)")</span>

此外,你还可以通过下标来访问元组中的单个元素,下标从零开始:

<span style="font-size:18px;">let http404Error = (404, "Not Found")
// http404Error 的类型是 (Int, String),值是 (404, "Not Found")
println("The status code is \(http404Error.0)")
// 输出 "The status code is 404"
println("The status message is \(http404Error.1)")
// 输出 "The status message is Not Found"</span>

你可以在定义元组的时候给单个元素命名,并可以通过名字来获取这些元素的值:

<span style="font-size:18px;">let http200Status = (statusCode: 200, description: "OK")
println("The status code is \(http200Status.statusCode)")
// 输出 "The status code is 200"
println("The status message is \(http200Status.description)")
// 输出 "The status message is OK"</span>


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

可选类型

JAVA中没有这个概念,我的理解是一个可选类型要么有值,要么什么都没有,例如一个可选类型的int变量要么有个整数值,要么就什么都不是(并不是初始化为0)。

<span style="font-size:18px;">let possibleNumber = "123"
let convertedNumber = possibleNumber.toInt()
// convertedNumber 被推测为类型 "Int?", 或者类型 "optional Int"</span>

因为toInt方法可能会失败,所以它返回一个可选类型(optional)Int,而不是一个Int。一个可选的Int被写Int?而不是Int。问号暗示包含的值是可选类型,也就是说可能包含Int值也可能不包含值。(不能包含其他任何值比如Bool值或者String值。只能是Int或者什么都没有。)

强制解析( ! 的使用)

<span style="font-size:18px;">let possibleNumber = "123"
let convertedNumber = possibleNumber.toInt()
println(convertedNumber+3)</span>

上面println那一行会提示错误,建议使用"!"或"?

在convertedNumber后面插入"!"后编译通过,所以"!"的作用是:当你确定可选类型确实包含值后,你可以在可选的字后面加一个感叹号(!)来获取值。这个惊叹号表示“我知道这个可选有值,请使用它。”这被称为可选值的强制解析(forced unwrapping)。

NIL

swift中得nil类似JAVA中的null,但是不同的是swift中除String类型的值能为nil外,其他类型的也可以,这样在有些方面就很方便了,先说说可选绑定。

使用可选绑定(optional binding)来判断可选类型是否包含值,如果包含就把值赋给一个临时常量或者变量。可选绑定可以用ifwhile语句中来对可选类型的值进行判断并把值赋给一个常量或者变量。

<span style="font-size:18px;"></span><pre name="code" class="html">let possibleNumber = "123"
if let actualNumber = possibleNumber.toInt() {
    println("\(possibleNumber) has an integer value of \(actualNumber)")
} else {
    println("\(possibleNumber) could not be converted to an integer")
}
// 输出 "123 has an integer value of 123"

这段代码可以被理解为:

“如果possibleNumber.toInt返回的可选Int包含一个值,创建一个叫做actualNumber的新常量并将可选包含的值赋给它。”

如果转换成功,actualNumber常量可以在if语句的第一个分支中使用。它已经被可选类型包含的值初始化过,所以不需要再使用!后缀来获取它的值。在这个例子中,actualNumber只被用来输出转换结果。

好了,下面继续说nil。在我们平常工作时,经常会遇到设置id的情况,假设这个变量id为int类型,在JAVA中我一般通过判断id是否为0来判断id是否被赋值(这种判断必须保证正常id不可能为0),有了nil,我们就可以通过判断id是否为nil来判断id是否被赋值了:
<span style="font-size:18px;"></span><pre name="code" class="html">var id: Int?

//id = 3

if let isNil = id{

    println("id's value is \(id)")

}else{
    
    println("id's value is nil")
}
<span style="font-size:18px;">
</span>
注意:
nil不能用于非可选的常和变量。如果你的代码中有常量或者变量需要处理值缺失的情况,请把它们声明成对应的可选类型。

隐式解析可选类型

就是在声明时在类型的后面加一个感叹号表示此值不会为nil
let assumedString: String! = "An implicitly unwrapped optional string."

断言

调试的时候用到,当满足前一个条件时后一个字符串会被输出并且程序结束
let age = -3
assert(age >= 0, "A person's age cannot be less than zero")
// 因为 age < 0,所以断言会触发




 
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值