Swift 学习1

来源:互联网 发布:朝鲜 知乎 编辑:程序博客网 时间:2024/05/21 22:21

前两天刚刚学习了Swift,感觉和OC的差异有点大啊,一开始并不习惯!
在这里记录下swift的学习笔记吧。

//常量和变量let number = 10//number = 5 常量不能改变var name = "sugar"name = "uzi"  //变量可以修改print(name)  //在控制台输出  相当于NSLoglet 汽车 = "汽车"print(汽车)//强制指定类型let number1:Int = 20let floatNumber:Float = 2.0let doubleNumber:Double = 3.00let 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.0print("2.5 * \(num) == \(num*2.5)")//判断字符串相等let sex = "男"let sex1 = "女"if sex == sex1{    print("一样")}else{    print("不一样")}var string1 = "smile"var string2 = "cry"var temp:Stringtemp = string1string1 = string2string2 = tempprint(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"] = 30print(animalDic)//修改animalDic["dog"] = 100print(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)}//第二种方法  "..<"就是<10for num1 in 0..<10 {    print(num1)}//这种  "..."就是<=10for 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 = 10if numberValue == 10 {    print("等于10")}else{    print("不是10")}//switch//不需要添加 break 系统会自动帮我们添加//fallthrough 贯穿 执行完判断之后 不会跳出 会继续往下执行//每个分支必须包含代码let numValue = 10//第一种switch numValue{case 10:    print("值为10")    fallthroughcase 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")    fallthroughcase (_,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.Westprint(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()//inoutfunc inoutTest(inout name:String) ->Void{    name = "sugar"}//定义一个变量var myname = "kkk"inoutTest(&myname)//打印外边的mynameprint(myname)

个人总结:感觉swift是很简便,但好像与Xcode的兼容性并不太好,有时候用swift写着写着就会报错,代码颜色全变白/黑,有时候还会直接崩溃。

行啦,第一天就学了这些Swift,可能是有OC的基础,感觉并不难理解。

0 0
原创粉丝点击