Swift学习笔记01:基本内容

常量和变量

常量和变量将一个标识符和一个特定类型的值关联起来,使得可以通过这个标识符来访问这个值。let声明一个常量,初始化之后就不可修改,var声明一个变量,它的值是可以修改的。

let pi = 3.14;
var n = 42;

在标识符后面加:可以添加类型注解,明确它可以储存的值的类型。如果省略了类型注解,编译器会根据值自行推断合适的类型。

let greeting: String = "Hello, World!";

标识符几乎可以使用任何字符,甚至包括 Unicode 字符,但不可以出现任何空白字符、数学符号、箭头、保留(或无效的)Unicode 码位、连线和制表符,也不能以数字开头。

使用print(_:sep:term:)函数打印常量或变量中的值。sep表示分隔符,默认为""term为结束符,默认为\n,如果不希望输出完换行,可以传入""。要将变量或常量的值插入到字符串中,可以用\()

let name: String = "John";
print("Hello, my name is \(name).");

注释

单行注释以//开头,到行尾结束;多行注释以/*开头,到下一个*/结束,可以换行。

整数

整数包括有符号(正、零或负数)和无符号(零或正数)的,根据占用的比特位分为 8、16、32、64 位。例如 8 位无符号整数是UInt8,32 位有符号整数是Int32。通过minmax属性来获取该数据类型可以取到的最小和最大值。

let minValue = UInt8.min;   // 0
let maxValue = UInt8.max;   // 255

IntUInt在 64 位操作系统中等价于Int64UInt64

字面量支持二进制(0b前缀)、八进制(0o前缀)、十进制和十六进制(0x前缀)。

浮点数

浮点数包括Float(32 位)和Double(64 位)两种,默认情况下编译器会将浮点数推断为Double类型。

字面量支持十进制、十六进制(0x前缀),十进制既可以是小数形式也可以是指数形式(eE,基数为 10),十六进制只能是指数形式(pP,基数为 2)。

数值类型转换

使用类型名()可以使用现有的变量创建一个新变量以参与运算,如:

let twoThousand: UInt16 = 2_000;
let one: UInt8 = 1;
let twoThousandAndOne = twoThousand + UInt16(one);  // UInt16, 2001

整数和浮点数之间的转换必须是显式的:

let a = 3;
let b = 0.14159;
let pi = Double(a) + b; // 3.14
let c = Int(pi);        // 3

结合数值常量/变量的规则和结合数值字面量的规则不同,因为数值字面量是没有明确类型的,只在编译器需要计算时才会被推测出来,因此字面量30.14159可以直接相加,但是两个常量/变量不可以。

类型别名

typealias为变量设置一个别名,可以结合上下文语境给类型一个更具可读性的名字。

typealias AudioSample = UInt64;

布尔值

布尔值Bool只能取两个常量值true(真)和false(假)。更详细的信息参见[[05.控制流|控制流]]。

元组

元组将多个值组合在一起,这些值可以是任何类型,并且不必相同。元组可以被拆开赋值给多个变量,如果希望丢弃某一个值可以用_代替。

let httpResp = (404, "Not Found");
let (code, detail) = httpResp;
print("The status code is \(code)");        // 404
print("The status message is \(detail)");   // Not Found

NAME.INDEX根据索引获取元组的值:

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

定义元组时可以给元素命名,这样就可以通过名称来访问:

let httpResp = (code: 404, detail: "Not Found");
print("The status code is \(httpResp.code)");       // 404
print("The status message is \(httpResp.detail)");  // Not Found

可选值

在类型注解后面加上?表示这个常量/变量可能没有值,也可以给变量赋一个nil将其设置为没有值。可以通过和nil比较来判断是否储存了值。

var a: Int? = 404;
var b = nil;
if a != nil {
	print("Value of a is \(a!)");
} else {
	print("a is nil");
}

可选项绑定可以判断是否包含值,如果包含就将值赋给一个临时的常量/变量。

if let val = a {
	print("Value of a is \(val)");
} else {
	print("a is nil");
}

临时变量/常量可以和原变量/常量同名,因此可以简写为:

if let a {
	print("Value of a is \(a)");
} else {
	print("a is nil");
}

如果在声明常量/变量时在类型注解后面添加!,就可以像非可选值一样使用而无须展开,被称为隐式展开可选类型。

错误处理

声明函数时,在函数名后面加throw关键字表示这个函数在遇到错误情况时会抛出一个错误。

func Foo throws {
	// this function may throw an error.
}

函数的访问者可以捕获这个错误并作出合适的反应。

do {
	try Foo();
} catch Error.Error1 {
	Deal1();
} catch Error.Error2(let msg) {
	Deal2(msg);
}

断言和先决条件

断言会在程序运行时检查一个逻辑条件是否为true,如果是则程序继续运行,如果不是程序就会立刻终止。

let age = -3;
assert(age >= 0, "A person's age can't less than 0.");

先决条件会在程序运行时检查一个逻辑条件是否为true,如果是则程序继续运行,如果不是程序就会立刻终止。

precondition(index > 0, "Index must be greater than 0.");
  • 17
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值