Playground是什么?
1>从Xcode6(swift开始出现时)开始出现的;
2>翻译为:操场/游乐场;
3>对于学习Swift基本语法非常方便:所见即所得(快速查看结果);语法特性发生改变时,可以快速查看;
swift最基本的语法变化
1>导入框架
import
UIKit
;
2>定义标识符时,必须声明该标识符时变量还是常量,声明标识符的格式:变量/常量关键字名称:数据类型;
3>语句结束时不需要加“;”,如果同一行有多个语句,则依然需要加,但是不建议一行多条语句;
4>Swift中打印语句:print(打印的内容)
Swift语法特点
1、从它的语法中能看到OC、JavaScript、C#、Pyhton等语言的影子;
2、借鉴了OC、JavaScript、C#、Pyhton等语言的优点;
3、同事具备编译型语言的高性能和脚本语言的灵活交互性
4、语法简单、代码简单、使用方便
5、可以轻松地与OC、C混合使用(相互调用)
6、提供了类似Java的名字空间(namespace)、泛型(generic)、运算对象重载(operator overloading)
苹果宣称Swift的特点是:快速、现代、安全、互动,而且明显优于Object-C语言;
可以使用现有的Cocoa 和 Cocoa Touch 框架;
Swift取消了OC的指针及其他不安全访问的使用;
舍弃OC早期应用的Smalltalk的语法,全面改为句点表示法;
Swift被简单的形容为“没有C的OC”(Object-C without the C)
为什么设计Swift语言
让应用开发更简单、更快、更稳定;
确保最终应用有着更好的质量;
重要性
苹果目前在大力推广Swift
2个不需要:
不需要编写main函数;
不需要在每一条语句后面加上分号(有一种情况必须加分号:同一行代码上有多条语句时);
注释:
// 单行注释;
/* 多行注释 */;
/* /* 多行注释嵌套多行注释 */ */
常量和变量
什么是常量和变量
- 在Swift中规定:在定义一个标识符时必须明确说明该标识符是一个常量还是变量
- 使用let来定义常量,定义之后不可以修改!
- 使用var来定义变量,定义之后可以修改!
使用注意
- 在真实使用过程中,建议先定义常量,如果需要修改再修改为变量(更加安全)
- 是指向的对象不可以再进行修改.但是可以通过指针获得对象后,修改对象内部的属性
注意:声明为常量不可以修改的意思是指针不可以再指向其他对象.但是可以通过指针拿到对象,修改其中的属性
Swift中的数据类型有:整型/浮点型/对象类型/结构体类型等等;
Swift中的类型推导
强类型语言:任何一个标识符都有明确的类型,所以,swift是强类型语言
注意:如果定义一个标识符时直接赋值,那么标识符后面的类型可以省略,因为swift有类型推导,会自动根据后面的赋值来决定前面的标识符的数据类型
例如:
// 定义变量的时候没有明确指定变量的类型,但是给变量赋值整型10,因此i为整型
var
i =
10
// 如果给变量赋值10.5,则变量会报错‘Cannot assign value of type 'Double' to type 'Int'’
i =
1
0.5
//
(错误)
i =
100
// (正确)
没有动态决定的,比如id类型;
Swift中的基本运算
Swift中在进行基本运算时必须保证类型一致,否则会出错。因为Swift中没有隐式转换,所以相同类型之间才可以进行运算。
数据类型的转化
- Int类型转成Double类型:Double(标识符)
- Double类型转成Int类型:Int(标识符)
例如:
var
a =
100
let
b =
5.20
let
c
=
Double
(a) + b
let
d
=
Int
(b) + a
逻辑分支
分支即if/switch/三目运算等判断语句,通过分支语句可以控制程序的执行流程
1、if分支
和OC中的if语句有一定的区别:
判断句可以不加()即 if后面的小括号可以省略;在swift的判断句中必须有明确的真假:不再有非0即真,必须有明确的bool值(false/true)
例如:
let
q =
20
if
q >
10
{
print
(
"大于"
)
}
// 这个是可选类型,因为必须声明为可选类型,才可以判断是否为空
let
view2 :
UIView
? =
UIView
()
if
view2 !=
nil
{
view2?.
backgroundColor
=
UIColor
.
yellow
}
2、三目运算符
跟OC风格一致
let
A =
20
let
B =
30
let
C = A > B ? A : B
print
(C)
3、guard的使用
guard是swift2.0新增的语法
它与if语句非常相似,它涉及的目的是提高程序的可读性
guard语句必须带有else语句,它的语法如下:
guard 条件表达式 else {
break
}
语句组
- 当条件表达式为true时候跳过else语句中的内容,执行语句组内容
- 条件表达式为false时候执行else语句中的内容,跳转语句一般是return、break、continue和throw
例如
let
age =
3
eatSugar
(age: age)
func
eatSugar(age:
Int
) ->
Void
{
guard
age >
5
else
{
print
(
"can not eat sugar"
)
return
}
print
(
"can eat sugar"
)
}
4、switch分支
苹果对Switch进行了大大的增强,使其拥有其他语言中没有的特性
基本用法和OC用法一致;
不同之处:switch后面不可跟();case后面无需跟break,默认会有break;一个case判断中,可以判断多个值,多个值以“,”隔开;如果希望出现之前的case穿透,可以使用关键字fallthrough
例如:1、
let
Age =
18
switch
Age {
case
18
:
print
(
"成年"
)
case
20
:
p
rint
(
"成年"
)
case
14
:
p
rint
(
"未成年"
)
default
:
p
rint
(
"不确定"
)
}
2、
switch
Age {
case
18
,
20
:
print
(
"成年"
)
case
14
:
p
rint
(
"未成年"
)
default
:
p
rint
(
"不确定"
)
}
3、
switch
Age {
case
18
:
fallthrough
case
20
:
p
rint
(
"成年"
)
case
14
:
p
rint
(
"未成年"
)
default
:
p
rint
(
"不确定"
)
}
swift支持多种数据类型的判断
1、浮点型判断
let
ca =
8.15
switch
ca {
case
8.15
:
print
(
"放假"
)
default
:
print
(
"不放假"
)
}
2、字符串判断
let
i =
3
let
j =
10
var
result =
0
let
operation =
"+"
switch
operation {
case
"+"
:
result = i + j
case
"-"
:
result = i - j
case
"*"
:
result = i * j
case
"/"
:
result = i / j
default
:
result =
0
;
}
print
(result)
3、区间判断
区间:通常我们指的是数字区间:0~100,100~200
swift的常见区间:
开区间:0...<10 表示0~9,不包括10(注意:…和<不能有空格)
闭区间:0...10 表示:0~10
例如:
let
score =
70
switch
score {
case
0
..<
60
:
print
(
"差"
)
case
60
..<
80
:
print
(
"中"
)
case
80
..<
90
:
print
(
"良"
)
case
90
..<
100
:
print
(
"优"
)
default
:
print
(
"棒棒的!"
)
}
循环
常见的循环:for/while/ do while
1、for循环
例如:
for
i
in
0
...
10
{
print
(i)
}
如果在for循环中不需要用到下标i,则可使用_代替
例如:
for
_
in
0
..<
10
{
print
(
"嗯嗯"
)
}
2、while
必须有正确的真假,没有非0即真;while后面的()可以省略
例如:
var
k =
0
while
k <
10
{
k +=
1
}
3、do while循环
使用repeat代替了do关键字
例如:
var
k =
0
repeat
{
k +=
1
}
while
k <
10
字符串
字符串在swift与OC中的区别
在OC中字符串类型是NSString,在swift中字符串类型是String;
OC中字符串使用@“”,在swift中字符串使用””
使用String的原因:
1>String是一个结构体,性能更高,NSString是一个OC对象,性能略差;
2>String支持直接遍历
3>Swift提供了String和NSString之间的无缝转换
字符串的使用
1、遍历字符串
var
s
tr =
"Merry Christmas"
for
char
in
str {
print
(char)
}
2、字符串拼接
1>两个字符串之间的拼接
例如:
let
str1 =
"Merry"
let
str2 =
"Christmas"
let
str3 = str1 + str2
print
(str3)
2>字符串和其他类型数据的拼接
例如:
let
month =
12
let
day =
"Christmas"
let
info =
"
\
(
month
)月25号 is
\
(
day
)"
print
(info)
3>字符串的格式化,比如:时间(08:04)
let
hour =
8
let
min =
4
let
time =
String
(format:
"%02d:%02d"
,arguments:[hour,min])
或者是
let
time =
String
(format:
"%02d:%02d"
,hour,min)
print
(time)
3、字符串的截取
Swift中提供的特殊的截取方式非常麻烦,Index创建较为麻烦
简单的方式是将String转成NSString来使用,在标识符后加 as NSString即可
例如:
var
s
ubStr = (myStr
as
NSString
).
substring
(with:
NSRange
(location:
4
,length:
3
))
var
s
ubStr1 = (myStr
as
NSString
).
substring
(to:
4
)
var
s
ubStr2 = (myStr
as
NSString
).
substring
(from:
2
)