简介
Swift是一种全新的语言,他是苹果官方推荐我们使用的一门语言,他比我们的OC还要简洁,直接。
当然,他的书写方法与我们的OC也有一定的区别
打印Hello World
printf("Hello Word")
注意:
Swift语法中是不需要在语句后面加上分号的
01、常量与变量
打印我们hello world !!!
| OC | NSLog(....); |
| -- | - -------- |
| Swift |** print(...)**|
注意:我们的Swift是不需要加上分号的
什么是常量?
常量就是在程序运行的过程中值永远不会变得量
什么是时变量?
顾名思义:时变量就是在程序运行过程中,值不断变化的量
类型 | 声明方法 |
---|---|
常量 | let |
时变量 | var |
常量定义方式
1、你可以选择任意你喜欢的字符、或者是Unicode(就是Mac表情)字符定义常量、变量名
2、常量名、变量名不能包括以下几种符号:
数学符号、箭头、保留的(非法的)Unicode码位、连线、制表符
也不能以数字开头、但是可以在常量、变量名的其他地方包含数字
注意:
Swift在定义常量的时候必须进行初始化,OC不用,但是Swift如果不进行初始化,就会报错
let max = 100
let 👿 = 200
在Swift中如果想要先定义一个变量,
以后使用时在初始化必须在定义时告诉编译器变量的类型
(类型标注)
写法为:
var age: Int
age = 20
定义的同时初始化:
在Swift中如果定义的同时初始化一个变量,可以不用写数据类型,编译器会根据初始化的自动推断出变量的类型(类型推断机制
)
var age: Int = 20
var age = 20
02、swift基本数据类型
基本数据类型
OC:
整型:int intValue = 10;
浮点型:double doubleValue = 10.10; float floatValue = 5.1;
长:long
短:short
有符号: signed
无符号: unsigned
各种类型的数据的取值范围在不同位的编译器下取值范围不同
Swift:注意关键字的大写
整型
var intVlue: Int = 10
浮点型
var intValue1: Double = 10.10 // 表示6位浮点数
var intValue2: Float = 9.3 // 表示32位浮点数
如果按照长度划分:Swift中的长短比OC更加精确
var intValue3: Int8 = 6
var intValue4: Int16 = 7
var intValue5: Int32 = 8
var intValue6: Int64 = 9
有符号、无无符号
默认有符号的是(UInt8/UInt16/UInt32/UInt64)
var uintValue: UInt = 10
注意:
无符号的数比有符号的取值范围更大,因为符号也用来存值
Swift是类型安全的语言,如果取值错会直接报错,而OC不会
取值错误:
OC:
unsigned int intValue = -10;//不会报错
Swift:
var intValue: UInt = -10 // 会报错
溢出:
OC:
int intValue = INT_MAX + 1; // 不会报错
Swift:
var intValue:UInt = UInt.max + 1 // 报错
数据类型的相互赋值(隐式类型转换)
OC可以隐式类型转换:
int intValue = 10;
double doubleValue = intValue;
Swift不具备有隐式类型转换:
以下语句会报错:
var intValue: Int = 10
var doubleValue: Double = intValue
数据类型转换
Swift不允许隐式类型转换,但是可以使用显示类型转换(强制类型转换)
OC写法
int intValue = 10;
double doubleValue = (double)intValue;
Swift写法
var intValue: Int = 10
var doubleValue: double
doubleValue = Double(intValue)
注意:
Double()并不会修改intValue的值,而是通过intValue的值生成一个临时的值赋值给doubleValue
print(intValue)
print(doubleValue)
3、SWift运算符
这里就简单的说一说
+、-、*、/、%、++、--
其实Swift与OC运算符只有一个取模不同,其他的完全相同,包括优先级
只是取模中Swift还能够进行小数取模,包括优先级
注意:
Swift是安全严格的编程语言,会在编译的时候检查是否溢出 但只是会检查字面量而不会检查变量
所以在Swift中一定要注意隐式溢出
遇到这种情况解决办法就是
(http://www.yiibai.com/swift/overflow_operators.html)
取模
// OC: 只对整数取模
NSLog(@"%tu", 10 % 3);
// Swift支持小数取模
print(10 % 3.5)
自增自减
var number = 10
number++
print(number)
number--
print(number)
赋值运算
var num1 = 10
num1 = 20
num1 += 10
num1 -= 10
num1 /= 10
num1 *=10
num %= 10
print(num1)
注意:
Swift的基本语法和OC一样, 唯一要注意的就是表达式的值
OC: 变大时的结合方向是从左到右
整个表达式的值整体是等于最后一个变量的值, 简而言之就是连续赋值 写法为 :
int num1;
int num2;
num1 = num2 = 10;
NSLog(@"%d", num2);
在Swift中不允许连续赋值, Swift的整体表达式是没有值的. 主要是为了避免if (c == 9) 误写成if (c = 9)
c = 9 是一个表达式, 表达式是没有值的 所以在Swift中if (c = 9)不成立 会报错
// Swift中这种写法是错误的
var num1: Int
var num2: Int
num2 = num1 = 10
4. 逻辑运算符
C语言和OC并没有真正的Bool类型
C语言的Bool类型非0即真
OC语言的Bool类型是
typedef sighed char Bool;
Swift中引入了真正的Bool类型
Bool true false
- Swift中if的条件只能是Bool的值或者是返回值是Bool类型的表达式
- OC中if可以是任何只能是一个Bool的值或者是是Bool类型的表达式
OC中if 可以是任何整数(非0即真), 但是存在的问题是可能是将判断写错, 写成赋值 if (isOpen = 2)
在开发中为了避免这个问题
有经验的程序员或这样写if(2 == isOpen)来避免这个问题.
在Swift中很好解决这个问题
逻辑运算符在Swift当中之能操作Bool类型数据
在OC当中是非0即真. 可以操作整型
在swift中不允许这种操作, 其他基本和OC一致
var open = false
if !open
{
print("打开")
}
var age = 20
var height = 180
var wage = 30000
if (age > 25 && age < 40 && height > 175 ) || wage > 20000
{
print("卧槽")
}
5. 区间
闭区间: 包含区间内所有值 a...b 例如 1...5
半闭区间: 包含头不包含尾 a..<b 例如: 1..<5
注意:
Swift刚出来时的写法是a..b
-
区间只能用于整数, 写小数会有问题
for i in 1...5
{
print(i)
}for i in 1..<5 { print(i) }
作者说
- 不好意思, UI文集暂时不更新了. 本人先将Swift笔记更新完. 以后的UI将会用Swift语言写.
- 本人Swift学的并不成熟. 如果有不对的地方请各位指点. 后面我会继续努力的.
- 寒假快要结束了, 先前一段时间一直在老家 . 没网😭😭😭 ,这两天刚到外面. 一到外面就开始写笔记了.
- 初次接触Markdown. 见谅哈