Swift基础1

常量和变量


1.使用let创建常量,使用var创建变量

import UIKit
//:常量,number的值不能改变
let number = 10
//:变量 number2的值可以改变
var number2 = 30

2.可以同时多声明多个变量或者常量,使用逗号隔开

let a = 1, b = 2, c = 3

var x = 1, y = 2, z = 3

3.type anotation类型注解

var message: String

当我们定义变量或者常量时,如果我们设置初始值,哪么编译器会根据初始值的类型,来设置变量或者常量的类型。如果没有设置初始值,哪么我们需要在变量或者常量后面,指明其类型。

4.swift标识符命名规则</br>
1.区分大小写;
2.不能与swift关键字冲突;
3.标识符由数字,字母和下划线组成;
4.标识符的首字母可以由下划线或者字母开始,但不能是数字;
note:swift中的字母是采用Unicode编码。Unicode叫做统一编码,它包含了亚洲的文字编码,如中文,日文,韩文等字符,甚至可以表示表情符号等。
如果一定要使用swift中的关键字,哪么需要使用重音符号(`)将其括起来。

 let hello_xx_9898 = x
 let _xxxdfdf_0 = 12
 let 🐙🐙🐧🐔🐧🐥🦄🐛₮௹₢₧₯ = 90
 var `class` = 100

5.变量与常量值打印

//直接在字符串中展示变量值 \(变量)
var numValue = 100.123456
print("the number value is \(numValue)")
//如果需要按特定的格式输出,哪么需要先按格式构造String对象,然后输出
let str = String(format: "the number is %.2f", numValue);
print(str)   

</br>

注释


1.单行注释

//单行注释
print("hello world")

2.多行注释

/*
 多行注释1
  */
 print("hello world")

</br>

整数


1.swift提供了8,16,32和64位的有符号和无符号的整数类型

//无符号8位整型
var a: UInt8
//有符号8位整型
var b:Int8
//无符号16位整型
var c:UInt16
//有符号16位整型
var d:Int16
//无符号32位整型
var e:UInt32
//有符号32位整型
var f:Int32
//无符号64位整型
var g:UInt64
//有符号64位整型
var h:Int64    

2.获取整型最大,最小值

//获取UInt8最小值
let minValue = UInt8.min
//获取UInt8最大值
let maxValue = UInt8.max

3.Int类型的大小取决与所在平台,我们推荐使用Int,这样可以提高代码的一致性和可复用性。
所在平台cpu是32位的,那么Int为Int32类型;
所在平台cpu是64位的,那么Int为Int64类型。

浮点数类型

1.Float表示32位浮点数类型
2.Double表示64位浮点数类型

let x:Double = 0.123456789012345678901234567890
let y:Float  = 0.123456789012345678901234567890

数字类型转换


1.Int类型转换

let one: Int8 = 2
let two: Int16 = 20
let result = Int16(one) + two

2.整数和浮点数类型转换

let x = 3;
let y = 2.14;
let z = Double(x) + y
let z1 = x + Int(y)

3.浮点数与浮点数转换

let x: Float = 1.1
let y: Double = 2.2
let z = Double(x) + y
let z1 = x + Float(y)

note:数字类型的常量和变量不同于数字的字面量。字面量本身没有明确的类型。当编译器计算出值后,根据值推测类型。

let a = 3 + 2.13

类型别名


类型别名,就是将现有的类型定义另起一个名字。关键字:typealias

typealias CarNum = String
var carIdentifier: CarNum
carIdentifier = "苏A1234566"

你可以在任何使用原始名称的地方使用别名。

布尔值


布尔值指逻辑上的值,因为它们只能是真或者假。Swift有两个布尔常量,true和false

var isFlag = false
isFlag = true

元组


元组把多个值组合成一个复合值。元组内的值可以是任意类型,并不要求是相同类型。
1.我们可以将一个元组的内容分解成单独的常量和变量;

let http404Error = (404,"NOT FOUND!")
let (statusCode,statusMessage) = http404Error
print("http status code: \(statusCode) and message: \(statusMessage)")

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

let (_,message) = http404Error
print("the message is \(message)")

3.我们还可以通过下标来访问元组中的单个元素;

print("the one item value is \(http404Error.0)")
print("the two item value is \(http404Error.1)")

4.我们可以在定义元组的时候给单个元素命名,然后我们可以通过此命名来获取这些元素的值;

let http200Status = (statusCode:200,desc:"ok")
print("the one item is \(http200Status.statusCode)")
print("the two item is \(http200Status.desc)")

可选类型(optionals)


使用可选类型(optionals)来处理可能缺失的情况。
1.eg:

let str = "1234"
//intValue被推测为Int?
let intValue = Int(str)

因为并不是所有的字符串都可以转换成一个整数。所以Int的构造器可能会失败,所以它返回一个可选类型的Int?,而不是Int。问号?暗示了该类型的变量可能包含Int值也可能不包含值。(不能包含其他任何值比如Bool值或者String值。只能是Int或者什么都没有)

2.我们可以给可选变量赋值为nil,来表示它什么值都没有。
note:nil只能用于可选的常量和变量
如果你声明一个可选常量或者变量,但没有赋值,系统会自动将其赋值为nil。

//定一个可选类型变量,但是没有赋值,哪么系统会自动赋值为nil
var value1: Int?
//nil只能赋值给可选类型变量或常量
value1 = nil


let value2: Int?
//nil只能赋值给可选类型变量或常量
value2 = nil

3.swift中的nil和OC中的nil并不一样。在OC中,nil是一个不指向任何对象的指针。在swift中不是指针,它是一个确定的值,用来表示值缺失。任何类型的可选状态都可以被设置为nil,不单单是对象类型。

强制解析


当我们确定可选类型确实包涵值之后,你可以在可选的名字后面加一个感叹号!来获取值。这个感叹号表示“我知道这个可选有值,请使用它。”这被称为可选值的强制解析。

let str = "1234"
//intValue被推测为Int?
let intValue = Int(str)

if intValue != nil{
    print("the int value is \(intValue)")
    print("the int valu eis \(intValue!)")
}

note:使用!来获取一个不存在的可选值会导致运行时错误。使用!来强制解析值之前,一定要确定可选包含一个非nil的值。

可选绑定


1.可选绑定(optional binding)来判断可选类型是否包含值,如果包含就把值赋给一个临时常量或者变量。

let str = "1234"
//intValue被推测为Int?
var intValue = Int(str)

if let value = intValue {
    print("int value is \(value)")
}else{
    print("int value is nil")
}

2.我们可以包含多个可选绑定在if语句中,并可以使用where子句做布尔值判断。

let x = Int("1234")
let y = Int("4567")

if let xValue = x , yValue = y {
    print("x value :\(xValue) and y value : \(yValue)")
}

if let xValue = x, yValue = y where y > x {
    print("y > x")
}

隐式解析可选类型


有时候在程序架构中,第一次被赋值之后,可以确定一个可选类型总会有值。在这种情况下,每次都要判断和解析可选值是非常低效的。这种类型的可选状态可以被定义为隐式解析可选类型。把用作可选类型后面的问号?改为感叹号! 来声明一个隐式解析可选类型。

let str1: String? =  "hello world"
print("str value is \(str1!)")

let str2: String! = "hello world"
print("str value is \(str2)")

note:
1.如果我们在隐式解析可选类型没有值的时候进行取值,会造成运行时错误。如同我们在没有值的普通可选类型后面加一个感叹号!一样;
2.我们仍然可以把隐式解析可选类型当做普通可选类型来判断它是否含有值;
3.我们也可以在可选绑定中使用隐式解析可选类型来检查并解析它的值;
4.如果一个变量之后可能要变成nil的话,请不要使用隐式解析可选类型。如果你需要在变量的生命周期中判断是否是nil的话,请使用普通可选类型。

错误处理


我们可以使用错误处理来应对程序执行中可能会遇到的错误。

//自定义错误类型
enum MyError : ErrorType {
    case errorOne
    case errorTwo
}

//抛出错误的方法
func hello() throws{
    throw MyError.errorOne;
}


//方法调用与处理
do{
    
    try hello()
    
}catch MyError.errorOne{
    print("catch errorOne")
    
}catch MyError.errorTwo{
    print("catch errorTwo")
}

断言


1.断言会在运行时判断一个逻辑条件是否为true。如果条件判断为true,代码运行会继续运行;如果条件判断为false,代码执行结束,程序被终止。

let x = 3
//不包含提示消息
assert(x > 0)
//包含提示消息
assert(x > 0, "x的值不能小于0哦")
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,383评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,522评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,852评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,621评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,741评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,929评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,076评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,803评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,265评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,582评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,716评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,395评论 4 333
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,039评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,798评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,027评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,488评论 2 361
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,612评论 2 350

推荐阅读更多精彩内容

  • Swift 是一门开发 iOS, macOS, watchOS 和 tvOS 应用的新语言。然而,如果你有 C 或...
    edison0428阅读 354评论 0 1
  • importUIKit classViewController:UITabBarController{ enumD...
    明哥_Young阅读 3,784评论 1 10
  • Swift 是一门开发 iOS, macOS, watchOS 和 tvOS 应用的新语言。然而,如果你有 C 或...
    XLsn0w阅读 922评论 2 1
  • 今天第一次写东西,之前想了很久,终于行动了。 北京的天阴沉了一天,到了晚上终于下雨了。被雨水冲刷的城市,清朗了许多...
    彩云的小小饭团阅读 180评论 0 0
  • 黑枸杞就是这么宠女人! 2017-02-19 肖叹集团战略合作伙伴 不知不觉,你已经从被小朋友叫姐姐的年龄变成叫阿...
    安如初梦阅读 327评论 3 0