前两天刚刚学习了Swift,感觉和OC的差异有点大啊,一开始并不习惯!
在这里记录下swift的学习笔记吧。
//常量和变量
let number = 10
//number = 5 常量不能改变
var name = "sugar"
name = "uzi" //变量可以修改
print(name) //在控制台输出 相当于NSLog
let 汽车 = "汽车"
print(汽车)
//强制指定类型
let number1:Int = 20
let floatNumber:Float = 2.0
let doubleNumber:Double = 3.00
let name1 = "sugar"
//类型转换 String() 字符串的拼接+
let str = name1 + String(number1)
print(str)
//打印字符串的长度
print(name1.characters.count)
//Character只是一个单个的字符
let char:Character = "A"
//字符串
var str1:String = "sugar在2班学习"
//空字符串
var empty_str = ""
var empty_str1 = String()
//判断字符串是否为空
if(str1.isEmpty){
print("是一个空的字符串")
}
else{
print("是一个有值的字符串")
}
//字符串拼接
var animalStr = "dog"
animalStr += "cat"
print(animalStr)
//字符串插值
var num = 3.0
print("2.5 * \(num) == \(num*2.5)")
//判断字符串相等
let sex = "男"
let sex1 = "女"
if sex == sex1{
print("一样")
}
else{
print("不一样")
}
var string1 = "smile"
var string2 = "cry"
var temp:String
temp = string1
string1 = string2
string2 = temp
print(string1)
print(string2)
以上是一些简单定义字符串、整型数据的方法。
在swift中,let用来定义常量,常量不可变,就是我们用let定义的东西不能再次对它进行修改操作;var用来定义变量,顾名思义,就是可以改变的。
这点和OC有很大区别啊,OC中定义可变字符串和不可变字符串如下:
NSMutableString *mulStr = [[NSMutableString alloc] initWithString:@"sdhjdsf"];//可变字符串创建方法(当然,只是其中一种)
NSLog(@"%@", mulStr);
NSString *str = @"sdjfdfs";//(不可变字符串,字面量方法创建)
NSLog(@"%@", str);
swift中的就很简洁的:
var mulStr:String = "shjdfh" //可变字符串
var mulStr1 = "dhjfhdfj" //这样创建的话,系统会帮我们识别是什么类型,就是系统会识别是字符串还是其他什么类型
let str2:String = "dsfjsjkldfg" //不可变字符串
还有字符串的拼接啊什么的,swift都会比OC要简单许多。除了字符串,像数组,字典,在swift里的定义方法都差不多。
var mulArr:Array = ["djdf", "ddff", "dwfegh"] //可变数组
let arr1:Array = ["dasdf", "dfdasf", "hrhh"] //不可变数组
//元素的类型必须是一样的
//元素类型为String的数组
let nameArray = ["sugar","张三","李四"]
//Array<String> Array 是类型 <String>数组中元素的类型
var name_array:Array<String> = ["kkk","张三"]
//元素类型为string的空可变数组
var empty_array = Array<String>()
var empty_int_array = [Int]()
//追加
name_array.append("王五")
print(name_array)
//往对应的位置添加一个元素
name_array.insert("zj", atIndex: 1)
print(name_array)
//"+="也是往数组后面追加元素 可以追加多个
name_array += ["lyl", "sh"]
print(name_array)
//修改
name_array[0] = "jianb"
print(name_array)
//删除
name_array.removeAtIndex(0)
print(name_array)
还有下面的字典
let dict = ["name":"sss", "age":15] //不可变字典
var dict1 = ["name":"sss", "age":15] //可变字典
//不给类型
var studentDic = ["name":"sss", "age":12, "sex":"男"]
print(studentDic)
//给类型 要对应 key 跟 value 的类型
var animalDic:Dictionary<String,Int> = ["dog":10, "cat":20]
print(animalDic)
//空字典
var empty_Dic = [:]
var empty_dic = Dictionary<String,Int>()
//增加
animalDic["fish"] = 30
print(animalDic)
//修改
animalDic["dog"] = 100
print(animalDic)
//删除
animalDic.removeAtIndex(animalDic.indexForKey("cat")!)
animalDic.removeValueForKey("dog")
print(animalDic)
swift中多了一个元组,有点类似于字典和数组的结合版
//元组中有两个元素 一个是String类型的 一个是Array类型的
let classInfo:(String,Array) = ("2班", ["ios", "H5"])
//给元组中元素一个名字
let classInfo1:(classname:String, course:Array) = ("2班", ["ios", "H5"])
//元素的名字去拿元素
print(classInfo1.classname)
print(classInfo1.course[0])
//元素的角标
print(classInfo.1[0], classInfo.0)
//练习
var dict = ["name":"sugar", "age":22, "sex":"男", "num":26]
var arr = [dict]
var arra = (dict, arr)
print(arra.1[0]["age"]!)
循环结构
//第一种方法
for var i = 0;i<100;i++ {
print(i)
}
//第二种方法 "..<"就是<10
for num1 in 0..<10 {
print(num1)
}
//这种 "..."就是<=10
for i in 0...10 {
print(i)
}
//for in 遍历数组/字典
var carArr = ["Audi", "Benz", "Posche", "BMW"]
for car in carArr{
print("carName___\(car)")
}
var NBADict = ["James":"骑士", "Paul":"快船", "Wede":"热火", "Kobe":"湖人"]
for (key,value) in NBADict{
print(key, value)
}
var num2 = 5
//如果大于0 就一直做循环
while num2 > 0{
num2--
print(num2)
}
//如果 while后边判断条件为真 会一直执行repeat里边的内容
//如果 while后边的判断条件为假 只会执行一次
repeat {
print("repeat")
}while 10<9
//判断语句
var numberValue = 10
if numberValue == 10 {
print("等于10")
}
else{
print("不是10")
}
//switch
//不需要添加 break 系统会自动帮我们添加
//fallthrough 贯穿 执行完判断之后 不会跳出 会继续往下执行
//每个分支必须包含代码
let numValue = 10
//第一种
switch numValue{
case 10:
print("值为10")
fallthrough
case 20:
print("值为20")
default:
print("Other")
}
//第二种
//也可以在这里写判断条件
switch numValue {
case 0...20:
print("小孩子")
case 20..<30:
print("小青年")
default:
print("Other")
}
//第三种 可以在switch中声明变量
switch numValue{
//在case 里我们可以声明一个变量 如果满足条件的话 我们就可以使用它 并且其值跟switch条件的值一样
case var num where numValue > 0 && numValue < 20:
num++
print(num)
default:
print("Other")
}
//第四种 在switch中 可以判断元组
let point = (x:10,y:10)
//"_" 忽略 在这里忽略掉第一个元素
switch point{
case (10,10):
print("10,10")
fallthrough
case (_,10):
print("_,10")
case (10,_):
print("10,_")
default:
print("Other")
}
枚举
//可以给枚举赋原始值 也可以不赋原始值 对应int来说是递增的
enum Direction:Int{
case East = 0
case South
case West
case North
}
let d1 = Direction.West
print(d1.rawValue) //取出原始值
//原始值是String类型
enum Season:String{
case Spring = "春天"
case Summer = "夏天"
case Autumn = "秋天"
case Winter = "冬天"
}
print(Season.Autumn.rawValue)
//通过原始值创建变量
enum Person:Int{
case 小明 = 1
case 八戒
case 大圣
}
let p1 = Person(rawValue: 1)
print(p1!)
函数
//无参无返回值
func sayHello() ->Void{
print("sayHello")
}
sayHello()
//无参有返回值
func sayHi() ->String{
return "sayHi"
}
//用常量接收返回值
let hiStr = sayHi()
print(hiStr)
//有参数无返回值
//()里面参数名 和 参数类型
//n1 n2叫做外部参数 作用就是调用的时候给我们看的(并没有什么卵用)
//num1 num2 叫做内部参数 是实际传进去的参数
func sum(n1 num1:Int, n2 num2:Int) ->Void{
print("\(num1+num2)")
}
/*
//如果我们不写外部参数 系统默认不显示第一个外部参数 其他都显示
//sum(5, n2: 3)
*/
//如果我们都不想让显示 我们可以加上"_"忽略外部参数
sum(n1: 5, n2: 3)
//总结:1.都显示就全都写上外部参数 2.都不显示就写上"_" 忽略掉 3.系统默认 第一个不显示,后面全显示外部参数
//有参有返回值
func baiduStrMethod(str3:String, str2:String) ->String{
return str3 + str2
}
print(baiduStrMethod("http://", str2: "www.baidu.com"))
//有参数有多个返回值
func caculate (num11:Int, num22:Int) ->(Int, Int, Int){
return (num11+num22, num11-num22, num11*num22)
}
print(caculate(10, num22: 5))
//函数嵌套
func test1(){
print("test1")
func test2() {
print("test2")
}
test2()
}
test1()
//inout
func inoutTest(inout name:String) ->Void{
name = "sugar"
}
//定义一个变量
var myname = "kkk"
inoutTest(&myname)
//打印外边的myname
print(myname)
个人总结:感觉swift是很简便,但好像与Xcode的兼容性并不太好,有时候用swift写着写着就会报错,代码颜色全变白/黑,有时候还会直接崩溃。
行啦,第一天就学了这些Swift,可能是有OC的基础,感觉并不难理解。