01Swift常量,变量与基本数据类型以及运算符

简介

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. 见谅哈

推荐阅读更多精彩内容