首先看下swift的常量和变量的定义初始化
/*
输出:
OC:NSLog(@"Hello, World!");
Swift3.0:print("Hello, World!")
*/
print("Hello, World!")
/*
“使用let来声明常量,使用var来声明变量”
变量:
OC:
1、先定义再初始化
int num;
num = 10;
2、定义的同时初始化
int num2 = 20;
Swift:
1、先定义再初始化
var num
报错: 没有指定数据类型(type annotation missing in pattern), 在Swift中如果想要先定义一个变量, 以后使用时再初始化必须在定义时告诉编译器变量的类型(类型标注)
*/
var num: Int
num = 10;
/*
2、定义的同时初始化
在Swift中如果定义的同时初始化一个变量,可以不用写数据类型, 编译期会根据初始化的值自动推断出变量的类型(其它语言是没有类型推断的)
以后在开发中如果在定义的同时初始化就没有必要指定数据类型, 除非需要明确数据类型的长度或者定义时不初始化才需要指定数据类型
*/
var num2:Int = 20
var num3 = 20
/*
你可以用任何你喜欢的字符作为常量和变量名,包括 Unicode 字符:
常量与变量名不能包含数学符号,箭头,保留的(或者非法的)Unicode 码位,连线与制表符。也不能以数字开头,但是可以在常量与变量名的其他地方包含数字。
错误:
var 3x = 10
var x+-3 = 10
*/
var 🐥 = 100
var 嘿嘿嘿 = 200
/*
常量:
OC: const int num = 10;
Swift: let num = 10
错误:
let num : Int
Swift中的常量必须在定义时初始化(OC可以不初始化), 否则会报错
常量的用途: 某些值以后不需要改变, 例如身份证
*/
let num4 = 10
/*
基本数据类型
OC:
整型 int intValue = 10;
浮点型 double doubleValue = 10.10; float floatValue = 5.1;
长 long
短 short
有符号 signed
无符号 unsigned
各种类型的数据的取值范围在不同位的编译器下取值范围不同
Swift:注意关键字大写
*/
//整型
var intValue:Int = 10
//浮点型
var intValue1:Double = 10.10 // 表示64位浮点数
var intValue2:Float = 8.9 // 表示32位浮点数
//如果按照长度划分,Swift中的长短比OC更加精确
var intValue3:Int8 = 6
var intValue4:Int16 = 7
var intValue5:Int32 = 8
var intValue6:Int64 = 9
//有符号无符号, 默认是有符号的(UInt8/UInt16/UInt32/UInt64)
var uintValue7: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中可以隐式类型转换), 以上语句会报错
*/
/*
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)
/*
C语言和OC并没有真正的Bool类型
C语言的Bool类型非0即真
OC语言的Bool类型是typedef signed char BOOL;
Swift引入了真正的Bool类型
Bool true false
*/
let isOpen = true
// let isOpen = 1;
// Swift中的if的条件只能是一个Bool的值或者是返回值是Bool类型的表达式(==/!=/>/<等等)
// OC中if可以是任何整数(非0即真), 但是存在的问题是可能将判断写错, 写成赋值 if(isOpen = 2), 在开发中为了避免这个问题有经验的程序员会这样写 if(2 == isOpen) 来避免这个问题. 在Swift中很好的解决了这个问题
if isOpen
{
print("打开")
}else
{
print("关闭")
}
/*
元组:
在其它语言中很早就是有元组这个概念, 但是对于OC程序员来说这是一个新的概念
将多个相同或者不同类型的值用一个小括号括起来就是一个元组
*/
let student = ("xiaohange",30,99.8)
print(student)
print(student.0)
print(student.1)
print(student.2)
/*
元组其实和结构体很像, 只是不需要提前定义类型, 那么如果不定义类型元组是什么类型呢?
元组其实是符合类型, 小括号可以写任意类型
*/
let student1:(String, Int, Double) = ("hello",30,19.9)
/*
元组的其他定义方式:指明应用元组元素的名称
*/
let student2 = (name:"hi",age:20,core:99.2)
print(student2.name)
print(student2.age)
print(student2.core)
/*
元组的其他定义方式:
通过指定的名称提取元组对应的值, 会将对应位置的值赋值给对应位置的名称
*/
let (name, age, score) = ("xioahan", 30 ,99.9)
print(name)
print(age)
print(score)
/*
如果不关心元组中的某个值可以利用_通配符来忽略提取
*/
let (name1, age1, _) = ("hello", 30, 99.9)
print(name1)
print(age1)
// 注:由于元组内容较多,我会在下一篇中继续学习分享
预知元组后续内容且看下文
网友评论