目录:
1、变量和常量
2、基本数据类型及其转换
2.1 Int类型
2.2 浮点类型
2.3 布尔类型
2.4 字符和字符串类型
2.5 元组类型
2.6 可选类型
2.7 数值可读性
2.8 类型别名
2.9 基本数据类型之间的转换
3、运算符和表达式
3.1 运算符简介
3.2 区间运算符
3.3 占位表达式
4、控制流
4.1 for循环
4.2 while循环
4.3 if、swich条件
4.4 控制转移语句
5、枚举和结构体
6、宏定义
7、代码规范
一、变量和常量
import Foundation //定义一个字符串常量 let obj_name_1 = "swift language"; //定义一个常量 声明为string类型 并初始化值 let obj_name_let : String = "work work"; //定义一个int类型的age var age = 2; //定义obj_name_2、obj_name_3 变量并复制,类型为string var obj_name_2 = "java",obj_name_3 = "c++"; //定义一个int类型的obj_4、定义一个string 类型的obj_5。并初始化 var obj_4 = 1,obj_5 :String = "hello"; //swift 支持emoji输出 let obj_name_4 = ""; //定义一个int类型的integer_type_1 var integer_type_1 = 0; //定义一个int16位的变量并赋值 var integer_type_2 : Int16 = 100; //定义一个int32位的变量并赋值 var integer_type_3 : Int32 = 200; //仅仅声明一个str变量为string类型的 var str : String;
总结:swift支持emoji表情输出,已经被初始化的值便被赋予了变量类型,变量被指定过值,便有了类型,后面则不可以被指定其它类型的值。重要:常量必须被初始化
二、基本数据类型及其转换
2.1 Int类型
Int分为:Int8、Int16、Int32、Int64、和UInt8、UInt16、UInt32、UInt64
println("----min最小取值范围---"); println(Int.min); println(Int16.min); println(Int32.min); println("----min最小取值范围---"); println("----max最大取值范围---"); println(Int.max) println(Int16.max); println(Int32.max); println("----max最大取值范围---"); 输出结果: ----min最小取值范围--- -9223372036854775808 -32768 -2147483648 ----min最小取值范围--- ----max最大取值范围--- 9223372036854775807 32767 2147483647 ----max最大取值范围---
println(UInt8.max); println(UInt16.max); println(UInt32.max); println(UInt64.max); println(UInt8.min); println(UInt16.min); println(UInt32.min); println(UInt64.min); 255 65535 4294967295 18446744073709551615 0 0 0 0
注意:在32或者64位电脑上,使用Int的数据精度时根据计算机而定。64位电脑Int的字节长度和Int64一样,32位电脑Int的字节长度和Int32一样。UInt类型也同理。
2.2 浮点类型
浮点类型分为double和float、double表示64位浮点数,float则表示32位浮点数。嗯,double能存储更大或者要求精度很高的数据。
let n1 : Float = 3.14555555555555; let n2 : Double = 3.1415926122312; println(n1); println(n2); //输出结果 3.14556 3.1415926122312
可以看到、double输出的精度更加准确些。
2.3 布尔类型
布尔类型只有两个值,true,false。经常用于条件语句判断
let logical_1 : Bool = true; let logical_2 = false; println(logical_1 && logical_2); //噢,输出结果时false。打上去吧。
2.4 字符和字符串类型
字符类型的值只能存储一个字符,unicode字符,比如"我"字、则对应的unicode字符为"\u6211"、字母"a"则对应"\u0061"。
var char_type_1 : Character = "/*emoji字符*/"; var char_type_2 : Character = "我"; var char_type_3 : Character = "Z"; println(char_type_1); println(char_type_2); println(char_type_3); //输出结果为: /*emoji字符*/ 我 Z
上面的emoji,是两个unicode字符,真是日了狗了(Character字符类型只支持一个表情符号,不支持两个。表情符号占二个unicode,也是可以输出的)
var str_1 :String = "Hello World"; var str_2 :String = String(6); println(str_1); println(str_2); //输出结果为: Hello World 99
2.5 元组类型
元组类型是swift的一种新数据类型,英文名字叫tuples。大概和结构体,数组,输出格式大概和json差不多。它可以包含很多种数据类型,将多个值合为单个值。(这点和javabean差不多),定义、使用还是很简单的。
var people = (name:"shaoyongyang",age:22,sex:"a little boy"); println(people); 输出结果为: (shaoyongyang, 22, a little boy)
注意:是小括号,不是大括号,也不是中括号。
2.6 可选类型
嗯,可选数据类型,这点不得不从swift语言说起:从前,swift语言规定“你们这些码农,在使用没被初始化的变量的时候,必须要给它赋值!”,所以现在在使用未被初始化变量的时候就会报错。后来人们觉得这个不行啊,很不方便开发,于是就有了可选类型。这个典故是小编辑告诉我的。
var str_1 : String; println(str_1) //这样直接使用会报错,编译器过不去。为什么?因为小小编辑说:“它没被初始化”
var str_1 : String?; println(str_1) var int_1 : Int?; println(int_1); //可选类型就是加入"?"号 var int_1 : Int?; int_1 = 2; println(int_1); println((int_1!.hashValue)); 输出结果为: nil Optional(2) 2
nil代表null的意思,也是空值。(swift的基本数据类型更像对象多一些,但是没有面向对象强大,各有优劣吧)
有关这点大家可以点击这个链接,进一步扩展:我是链接
嗯,本身我以为可选数据类型是类型本身可改变。就像javascript 的var包含int、string、float一样,真是日了狗了。理解错了。
数据类型在一开始的时候就定义好了
var int_1 : Int?; //其实就是定义了一个int类型的变量,只是可以不被初始化。 //如果需要正常的取数据,则需要下面这种写法 println((int_1!.hashValue));
再附上一个例子:
var numStr:String = "444"; //?号是允许变量没有值 var num:Int? = numStr.toInt(); println(num); println(num?.hashValue); //!号是,确定可选类型变量一定有值 println(num!.hashValue)
2.7 数值可读性
嗯,有关数值可读性,无非就是十亿,百亿,千亿。可能小小编辑有这么多钱,大家可以去打劫她。大概代码就像下面这样。
var value_1 = 10_000_000_000; var value_2 = 1_00000_00000_0000; println(value_1); println(value_2);
可读性是不是好了很多?swift只能用下滑线,别想太多。
2.8 类型别名
类型别名是个很有意思的东西,比如下面的代码:
typealias oschina = Int32; typealias oschinaFloat = Float32; var age : oschina = 44; var size : oschinaFloat = 2.888; println(age); println(size); 输出结果为: 44 2.888
就是起个别名,似乎也没啥用,我记得c++里面也有,不过java似乎不需要..不需要...
2.9 基本数据类型之间的转换
上码!
var j : Int = 3; //把Int 转为Float println(Float(j)); //把Int 转为Double println(Double(j)); //把Int 转为String println(String(j)); var str : String = "44"; var s1 = str as NSString; //把String 转为int println(s1.intValue); //把string 转为double println(s1.doubleValue); //把String 转为float println(s1.floatValue); var float_type : Float = 2.8888; var double_type : Double = 4.8888; //把Double 转为String var str1:NSString = NSString(format: "%.04f", double_type); //把float 转为string var str2:NSString = NSString(format: "%.04f", float_type); println(str1); println(str2); //把String 转为float和 double var str3 : String = "8.8888"; var f3 = (str3 as NSString).floatValue; var f4 = ("222.22" as NSString).floatValue; println(f3); println(f4);
都在这了,要的尽管拿去。
三、运算符和表达式
3.1 运算符简介
运算符分为一元、二元、三元
一元运算符指的是对单一操作的对象,比如(-x)、还分为前置和后置之分。前置则紧排操作对象,比如:!y,后置则跟操作对象之后,比如i++;
二元运算符是操作两个对象,比如1+2、3+5、a+b。受运算符操作的左右对象称为操作数;
三元运算符操作三个操作对象,比如:a?b:c、也叫三目运算;
一元符号,看下面的代码:
var t : Int = 3 println(-t) 输出结果为: -3
相反、一元正号也是同理。
3.2 区间运算符:
for index in 1...3 { println(index); } for index1 in 1..<3 { println(index1); } 输出结果为: 1 2 3 1 2
第一个for是区间运算,第二个是半闭区间(不包含最后一个值)
3.3 占位表达式
var xt :Int?; (xt,_) = (20,30) println(xt!.hashValue);
上面的代码20赋值给了xt变量,30则被忽略了。
四、控制流
4.1 for循环
for index in 1...2 { println(index); } for var t=1;t<=2;t++ { println(t); }
嗯,大概就跟上面的demo code、差不多。
4.2 while循环
var count = 0; while(count<10) { println(count); count++; } do { println(count); count++; } while (count <= 11)
4.3 if、swich条件
var bl :Bool = true; var bt :Bool = false && false; if (bl || bt) { println("1>2"); } else if(1<2) { println("1<2"); } else { println(2); } var num = 0; switch num { case 0: println(0); case 1: println(1); case 2: println(2); default: println("default"); }
4.4 控制转移语句
var num = 44; for var t=0;t<10;t++ { if(t==8) { break; } else if(t==6){ continue; } else { println(t); } } switch num { case 44,45,46: println("case one");fallthrough; //fallthrough的意思是匹配到这个case之后,继续匹配case。 case 44:println("case two"); default:println("ok"); } 输出结果为: case one case two
五、枚举和结构体
enum Week { case Monday; case Tuesday; case Wednesday; case Thursday; case Friday; case Saturday; case Sunday; } enum People { case boy,gril; } println(People.boy.hashValue);
枚举定义了一个通用类型相关的值,枚举也可以包含方法,比如下面的代码:
enum People { case boy,gril; func sayHi(){ println("hi"); } } var t : People = People.boy; t.sayHi();
接下来结构体呢,它和class有很多地方一样,方法的构造器、结构体和类的区别在于结构体是传值、类是传引用
struct People { var name :String; var age : Int; var sex : Int; func sayHi() ->Int { return 1; } } var p1 :People = People(name:"shaoyongyang", age :22,sex:0); println(p1.name); println(p1.sayHi());
比较简单,没啥要注意说明的。
六、宏定义
swift并没有加入宏,但swift中类似宏定义,可以单独创建一个类,比如:Contans.swift,再此类中声明
import Foundation class Contans { let DEV_VERSION:String = "IPHONE7"; } //main.swift引入 var c : Contans = Contans(); println(c.DEV_VERSION);
swift支持条件编译
#if true||false println(11) #elseif true||false println(2); #elseif true && false println(3) #endif 输出结果为: 11
七、代码规范
1、间隔缩进,代码缩进一个tap距离
2、方法命名,首字母小写,之后每个单词都要大写,见名要知道意思。
3、变量命名,首字母小写,之后每个单词都要大写,名字要有足够的说明性。
4、枚举类型,首字母大写,之后每个单词首字母大写。
5、注释文件包含文件头,要有说明文件名,创建时间,变更纪录。
6、语句嵌套层次不得超过3层,每个文件最好代码500行内,不得超过1000行、超过之后要考虑重构