zoukankan      html  css  js  c++  java
  • 简单谈谈OC与Swift的异同

    Swift,苹果于2014年WWDC(苹果开发者大会)发布的新开发语言,可与Objective-C*共同运行于Mac OSiOS平台,用于搭建基于苹果平台的应用程序。

    目前已经更新到Swift2.0,即将发布3.0版本.听说有很大的变动呢.现在我们先来了解一下Swift与OC基础的小异同(不过如果要说它与OC有什么不同,感觉很不同啊~~~)

    1.输出日志不同

    2.常量变量定义不同,swift 类型的长短比OC更精确,swift是类型安全的语言,swift不允许隐式转换,但是可以显示转换

    3.运算符:+ , - ,  * , / ,%, ++,--,OC和swiftch除了取模运算符,其他用法都一样,OC取模必须是整数,swift取模可以是小数,swift不可以连续赋值,但是OC可以

    4.分支

    @1

    1)、if后的括号可以省略

    2)、if后只能接bool值

    3)、if后的大括号不能省略

    @2

    swift和OC的循环差不多,但是swift,for后括号可以省略

    @3

    1)while循环:while后的括号可以省略,只能是bool值作为条件语句

    2)OC中有do-while,swift中do是用来捕获异常的,swift里用repeat-while

    4.swift里有元组,OC木有

    5.swift的nil和OC有些不一样,OC只有对象可以用nil,swift基础类型(整形,浮点)没有值时也是nil,当初始化的时候,swift可以没有初始值的,产生了可选值Optional。

    6.OC/swift的字符分别用''/"",字符串NSString/String  @""/"",OC以/0结束字符串,swift不是

    1.OC 用NSLog输出日志

      swift 用print输出日志

    swift语句结束不需要加;号

    2.OC 定义常量 const int a = 10;

       swift 定义常量 let a = 10

      OC 定义变量 int a = 10;

      swift 定义变量   var a:Int = 10

    先确定类型,再赋值

    var a:Int

    a = 20

    print(a)

     let a:Float = 10.3 //表示32位浮点型

    let b:Double = 10.2 //表示64位浮点型

     //swift 类型的长短比OC更精确

    let intValue1 :Int

    let intValue2 :Int16

    let intValue3 :Int32

    let intValue4 :Int64

    let uintValue :UInt

     //swift是类型安全的语言,如果直接赋值错误,直接报错,OC不会

    let uintValue:UInt = -10

    //swift不允许隐式转换,但是可以显示转换

    var a:Int = 10

    var b:Float = Float(a)

    范围运算符:

        封闭范围运算符:

        包括闭包区间所有值 a...b

         半封闭范围运算符:

        包含头不包含尾 a..<b

        应用场景:遍历数组

         for i in arr {

        }

        for i in 1...5 {

        print(i)

        }

       for i in 1..<5 {

        print(i)

        }

       Bool:

        C和OC并没有真正意义上的bool值

        C 0假 非0即真

        OC 的BOOL类型 typedef signed char BOOL

        swift真正的bool

        真是ture  假是false

        if true {

        print("yes")

        } else {

        print("no")

        }

    3.

    do {

    index--;

    }while(index > 0)

     //swift中do是用来捕获异常的

    repeat {

    index--

    print(index)

    }while (index > 2)

    4.元组:将多个相同或者不同类型的值用一个小括号括起来就是一个元组。元组和结构体很像,实际上元组是复合类型。小括号内可以写任意类型,如果不定义类型,可以根据数据自动判断推算出类型

     //省略了类型

    let person = ("YCG",17,180.00)

    //没有省略类型

    let person1:(String,Int,Double) = ("YCG",17,180.00)

    //获取元组中的某一项

    print(person.0)

    print(person.1)

    print(person.2)

    //以上元组定义有很大的缺陷,可读性特别差。

    //用其他方式定义元组

    //省略类型

    let person2 = (name:"YCG",age:17,height:80.00)

    //没有省略类型

    let person3:(name:String,age:Int,height:Double) = (name:"YCG",age:17,height:80.00)

    //获取相应的值

    print(person2.name)

    print(person3.height)

     //元组的其他写法

     let (name,age,height) = (name:"YCG",age:17,height:80.00)

    print(name)

    print(age)

    print(height)

    5.

    定义可选值很容易,只需在类型的后面加一个?就行。例如:var value:Int?

     一个Optional值和一个非Optional值的区别,Optional值未经初始化虽然为nil,但普通变量连nil的没有。

       var value:Int?

        print(value) //nil

         var value:Int

        print(value) //直接报错

    提取可选类型的值(强制解析)

    Optional值不能被直接使用,因为可选值有两种状态,分别是有值和没值,所以我们需要告诉编译器是否有值

     强制解析可选类型的值,只需在变量后加!就可以。

     var value:Float?

     var value2:Float = value!

     print(value2)

     注意:如果value没有值,会报运行时错误。

     当我不知道 Optional是否有值,该怎么操作?

    如果值不为nil,再执行后面的代码。

    var value:Int? = 10

     if let tmpValue = value {//先定义一个中间常量,value即时没有值,也不会崩溃

      print(tmpValue)

        }

    可选项:??,他可以对nil进行快速判断,??后面的值是参与计算的

    var num:Int?

     let result :Int = num ?? 0

     print(result)

    6.

    //字符串的常用方法

    //1、初始化空字符串

    let emptyString = ""

    let emptyString2 = String()

    //2、遍历字符串

    let string2 = "你是我们的好朋友!"

    for a in string2.characters {

        print(a)

    }

    //3、获取字符串的长度

    let count = string2.characters.count

    print(count)

    //4、判断字符串是否为空

    let emptyStr = "1"

    if emptyStr.isEmpty {

        print("yes")

    }

    //5、字符串的拼接

    let str1 = "hello"

    let str2 = "world!"

    let result = str1 + str2

     var str3 = "haha"

    str3 = str3 + str2

    print(str3)

     //6、格式化字符串

     let intValue = 10

    let str4 = "爱情"

    let str5 = "(intValue)、因为(str4),不会悲伤"

    print(str5)

     //取小数后两位

    let pi = 3.1415

    let str6 = String(format: "%.2f", pi)

    print(str6)

     //7、字符串比较

     //和C语言strcmp一样

     let str7 = "a"

    let str8 = "ab"

     if str7 > str8 {

        print(">")

    } else if str7 < str8 {

        print("<")

    }

     //8、是否有前后缀

     let str9 = "www.baidu.com"

    if str9.hasPrefix("www") {

        print("yes")

    } else {

        print("no")

    }

    if str9.hasSuffix("cm") {

        print("yes")

    } else {

        print("no")

    }

     //9、大小写

    let str10 = str9.uppercaseString

    let str11 = str9.lowercaseString

     print(str10)

     //10、String转基本数据类型

     let str12 = "5.2吗"

    let num = Float(str12)

    print(num)

     //11、截取字符串

    let str13 = "你是我们的好朋友!"

    //str13.startIndex  从0开始 Index不是int

    let fromStr = str13.startIndex.advancedBy(2)

    let toStr = str13.endIndex.advancedBy(-2)

    let str14 = str13.substringFromIndex(toStr)

     let range:Range <String.Index> = Range(start: fromStr, end: toStr)

    let str15 = str13.substringWithRange(range)

     print(str15)

     let toStr1 = (str13 as NSString).substringToIndex(2);

    print(toStr1)

     let range1 = NSRange(location: 2, length: 6)

     let toStr2 = (str13 as NSString).substringWithRange(range1)

    print(toStr2)

  • 相关阅读:
    Beyond Compare比较图片怎么修改背景颜色
    Leonardo's Notebook UVALive
    Saddle Point ZOJ
    概率dp总结 正在更新
    First Knight UVALive
    Scout YYF I POJ
    RedIsGood TopCoder
    聪聪和可可 HYSBZ
    So you want to be a 2n-aire? UVA
    国家队论文集
  • 原文地址:https://www.cnblogs.com/ycg0808/p/5507060.html
Copyright © 2011-2022 走看看