简单谈谈OC与Swift的异同
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了简单谈谈OC与Swift的异同相关的知识,希望对你有一定的参考价值。
Swift,苹果于2014年WWDC(苹果开发者大会)发布的新开发语言,可与Objective-C*共同运行于Mac OS和iOS平台,用于搭建基于苹果平台的应用程序。
目前已经更新到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)
以上是关于简单谈谈OC与Swift的异同的主要内容,如果未能解决你的问题,请参考以下文章