Swift基础学习笔记
1、在学基本语法之前,简单看一下与OC的不同
注释:OC #pragma marks 视图加载完成
Swift //MARK: 视图加载完成
//TOOO:设置背景颜色(Xcode 8.0 特有)
//FIXME:更改头像
创建一个视图View:
OC [[UIView alloc]initWithxxx:];
Swift UIView(xxx:)
类名() == alloc/init 等价
类方法:
OC [UIColor redColor];
Swift UIColor.red
2.0 UIColor.redColor
访问当前对象的属性,Swift可以不使用self.:
OC [self.view addSubview:v];
Swift view.addSubview(v)
建议:都不用,在编译器提示的时候再添加,会对语境有更好的体会
原因:闭包(类似OC block),需要使用self.
没有";"
";"目的分割语句的,在Swift中,默认不需要
枚举类型:
OC UIButtonTypeContactAdd
Swift ‘.’contactAdd
监听方法
OC @selector
Swift #selector 如果带参数不使用‘:’
2.0 直接使用"",如果带参数使用‘:’
调试
Swift print
没有时间
效率比NSLog更高
跟踪函数
OC __FUNCTION__
Swift #function
//2.0语言print(__FUNCTION__)
//3.0语言 print(#function)
2、常量与变量
1》 关于常量let和变量var的选择:
不可变的会更加安全,开发时,通常使用let,再需要改变的时候,再改成var
2》如果一个变量从未被改变,会提出警告
//Variable 'x' was never mutated; consider changing to 'let' constant
//变量x从来没有被修改,建议使用let
3》修改视图属性,依然使用常量
let v = UIView()
//仅仅修改v的属性,并没有修改v的指针地址
v.backgroundColor = UIColor.redColor()
4》如果需要指定变量和常量的类型,可以使用 let x:类型 = 值
提示:在Swift开发中,极少使用直接指定类型,通常都是自动推导
5》定义变量var,定义后可以修改;常量let,定义之后不可修改
自动推导变量和常量的类型会根据右侧的代码的执行结果,推导对应的类型
热键:option + click 查看类型
整数:Int 与OC中的NSInteger类似
小数:Double 与OC中的CGFloat类似
6》在Swift中对类型要求异常严格
任何不同类型的数据之间,不允许直接运算,不会做默认隐式转化,所有的数据类型确定都要由程序员负责
7》Swift不在基本数据类型,都是结构体
3、可选项Optional
(1)原始的可选项定义(None 没有值 或者 Some某一类值)
let x:Optional = 10
(2)简单的定义
'?'用来定义 y是一个可选项的整数类型
let y:Int? = 20
如果不进行初始化会直接报错:
Constant 'y' captured by a closure before being initialized
//常量y使用之前必须初始化
不同类型之间的值不可以直接运算,如果没有值则默认nil,不是任何数据类型,不参与计算,print(x+y)提示错误;
解决:'!'强行解包,在可选值中选择非空值,如果值初始化为nil,会崩溃
定义y,没有初始化
let y:Int?
给常量设置数值,初始化的工作能做一次
y = 20
//两次修改常量会报错
//y = 3
var 的可选项默认为nil
//let 的可选项没有默认值
var x:Int?
//输出nil
x = 10
x = 100
//输出可选项100
print(x)
4、逻辑分支
1>简单的分支
a.条件不需要()
b.语句必须有{}
if x < 6 {
}else {
}
2>三目(三目语法跟OC一样)
x > 5 ? print() : print()
有时候使用'()'表示空执行
x > 5 ? print() : ()
3>switch
/*
1.switch 可以针对任意类型的值进行分支,不在局限整数
2.switch 一般不需要break
3.switch 如果多时,使用','
4.所有的分支至少需要一条指令,如果什么都不干,才使用break
*/
func demo(num: String){
//let num = 10
switch num {
case "10","9":
print("优")
case "8":
break
default:
print("一般")
}
特殊的使用,不经常出现
let point = CGPoint(x: 10, y: 10)
switch point {
case let p where p.x == 0 && p.y == 0:
print("原点")
default:
print("")
}
5、可选的判断
1、if let 和 guard let 的技巧:
使用同名的变量接收者,在后续使用的都是非空值,不需要解包;
好处:可以避免命名的烦恼
guard 守卫/守护
guard let 和 if let 刚好相反
if let name = name,age = age {
//非空的name和age仅在{}有效
print(name + String(age))
print("------------")
}else{
print("姓名或者年龄为 nil")
}
//guard let 守护一定有值,如果没有直接返回
guard let name = name,age = age else{
print("姓名或者年龄为 nil")
return
}
//代码执行至此,name和age一定有值
//通常判断是否有值之后,会做具体的逻辑实现,通常代码多
//如果用if let 凭空多了一层分支,guard是降低分支层次的办法
//guard 是Swift 2.0之后推出的
print(name + String(age))
2、if let/var 连用语法,目的就是判断值
//不是单纯的if
if oName != nil && oAge != nil {
print(oName! + String(oAge!))
}
//if let 连用,判断对象的值是否为nil,{}内一定有值,可以直接使用,不需要解包
//if var 连用,{}内可以对值进行修改
if var name = oName,let age = oAge {
name = "老李"
//进入分支之后,name 和 age 一定有值,不需要解包
//name age 作用域仅在{}中
print(name + String(age))
}else{
print("name 或者 age 为nil")
}
3、??
??是一个简单的三目
如果有值,使用值
没有值,使用 ?? 后边的值代替
//?? 操作符的优先级低 ,在使用的时候最好加上()
print((x ?? 0) + (y ?? 0))
Swift基础学习笔记的更多相关文章
- Swift基础学习笔记 一
之前学习过一段时间swift,由于目前开发的项目还是用的OC,一段时间不看swift又基本忘干净了,好记性不如烂笔头,还是用博客记录一下自己学的东西吧. 基本数据类型: 1.常量(let)和变量(va ...
- 【C#编程基础学习笔记】4---Convert类型转换
2013/7/24 技术qq交流群:JavaDream:251572072 教程下载,在线交流:创梦IT社区:www.credream.com [C#编程基础学习笔记]4---Convert类型转换 ...
- 【C#编程基础学习笔记】6---变量的命名
2013/7/24 技术qq交流群:JavaDream:251572072 教程下载,在线交流:创梦IT社区:www.credream.com [C#编程基础学习笔记]6---变量的命名 ----- ...
- 1.C#基础学习笔记3---C#字符串(转义符和内存存储无关)
技术qq交流群:JavaDream:251572072 教程下载,在线交流:创梦IT社区:www.credream.com ------------------------------------- ...
- Swift基础学习
Swift基础学习 http://c.biancheng.net/cpp/html/2242.html 这个网站最近看了一下,对于基本语法解释概括的相对全面,如同重新练习一遍OC似的,挺全面的,谢谢 ...
- Java基础学习笔记总结
Java基础学习笔记一 Java介绍 Java基础学习笔记二 Java基础语法之变量.数据类型 Java基础学习笔记三 Java基础语法之流程控制语句.循环 Java基础学习笔记四 Java基础语法之 ...
- Mysql数据库基础学习笔记
Mysql数据库基础学习笔记 1.mysql查看当前登录的账户名以及数据库 一.单表查询 1.创建数据库yuzly,创建表fruits 创建表 ) ) ,) NOT NULL,PRIMARY KEY( ...
- 0003.5-20180422-自动化第四章-python基础学习笔记--脚本
0003.5-20180422-自动化第四章-python基础学习笔记--脚本 1-shopping """ v = [ {"name": " ...
- Java基础学习笔记(一)
Java基础学习笔记(一) Hello World 基础代码学习 代码编写基础结构 class :类,一个类即一个java代码,形成一个class文件,写于每个代码的前端(注意无大写字母) XxxYy ...
随机推荐
- Angular面试题
1. ng-show/ng-hide 与 ng-if的区别? 我们都知道ng-show/ng-hide实际上是通过display来进行隐藏和显示的.而ng-if实际上控制dom节点的增删除来实现的.因 ...
- [51nod1212]最小生成树模板
解题关键:注意下标 解法一:prim算法 #include<bits/stdc++.h> #define maxv 1002 #define maxm 50002 #define INF ...
- php学习笔记-php中把浮点数转化为整数
在php中有时候会遇到比如 14.6%3这种操作,php是会先把14.6转化为整数再做其它的操作,那么这个转化为整数的操作是floor(14.6)还是ceil(14.6)还是round(14.6)呢? ...
- p2055&bzoj1433 假期的宿舍
传送门(洛谷) 传送门(bzoj) 题目 学校放假了······有些同学回家了,而有些同学则有以前的好朋友来探访,那么住宿就是一个问题.比如A 和B都是学校的学生,A要回家,而C来看B,C与A不认识. ...
- p2345 奶牛集会
传送门 题目 约翰的N 头奶牛每年都会参加“哞哞大会”.哞哞大会是奶牛界的盛事.集会上的活动很 多,比如堆干草,跨栅栏,摸牛仔的屁股等等.它们参加活动时会聚在一起,第i 头奶牛的坐标为Xi,没有两头奶 ...
- 使用Paramiko的问题
在使用Paramiko远程登录的时候,会报sudo: sorry, you must have a tty to run sudo 切换到root用户,使用visudo命令,然后就会打开一个文本,在文 ...
- bash字符串匹配
#!/bin/shfoo(){ local basedir=$1 local all_entries=`ls -c` for entry in $all_entries do ...
- Ubuntu 安装 samba 实现文件共享和source insight 阅读uboot
环境:win10 + 虚拟机Ubuntu 12.04 一. samba的安装: # sudo apt-get install samba # sudo apt-get install smbfs 二. ...
- App裂变活动多种玩法解析
移动互联网时代,流量为王.在App获取流量的过程中,有资金的砸广告,没资金的铺渠道,但是不管你有钱没钱,社交平台都是必须重点争夺的流量阵地. 毕竟,截至2018年底,微信及WeChat的合并月活跃账户 ...
- ajax跨域问题解决方案(jsonp,cors)
跨域 跨域有三个条件,满足任何一个条件就是跨域 1:服务器端口不一致 2:协议不一致 3:域名不一致 解决方案: 1.jsonp 在远程服务器上设法动态的把数据装进js格式的文本代码段中,供客户端调用 ...