简单谈谈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)

时间: 2024-10-19 18:03:33

简单谈谈OC与Swift的异同的相关文章

初步swift语言学习笔记9(OC与Swift杂)

笔者:fengsh998 原文地址:http://blog.csdn.net/fengsh998/article/details/34440159 转载请注明出处 假设认为文章对你有所帮助,请通过留言或关注微信公众帐号fengsh998来支持我,谢谢! swift 语言出来后,可能新的项目直接使用swift来开发.但可能在过程中会遇到一些情况.某些已用OC写好的类或封装好的模块.不想再在swift 中再写一次.哪就使用混编.这个在IOS8中是同意的. 先中简单的入手,先研究在同一个project

swift篇第五期:UITableView,OC与Swift互调

先写一个UITableView的简单创建吧,经过前面几期的内容,那么创建一个常用的控件也是蛮简单的哦   class ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate, NSURLConnectionDataDelegate {          var dataArray = NSMutableArray()     var tableView: UITableView?     overr

OC跟Swift混编

OC项目中使用Swift 本文版权归作者所有,如需转载请联系孟祥月 CSDN博客:http://blog.csdn.net/mengxiangyue  独立博客:http://mengxiangyue.com 最近公司的项目开始计划使用Swift,由于原先的工程都是使用OC编写的,不可能一下全部转换成Swift,所以采用OC与Swift混编的方式是最好的选择.这篇文章只是一个简单的介绍,并没有太高深的知识. 我新建了一个演示的OC工程,当然你可以使用你已经存在的OC的工程.如果我们想要在OC工程

iOS OC和Swift进行互相调用

有时候 ,我们会涉及到双向编程,特别是OC和swift的互相引用. swift调用oc的方法: 1.桥接文件,一般是swift工程,在创建一个oc文件时,系统自动添加(不用改名,直接默认即可) 2.将需要引用的oc文件 .h头文件 添加到桥接类中. 如下: 然后在swift调用处,直接就可以使用了. oc调用swift的方法: 1.首先设置一下Packing 进入TARGETS ->Build Settings -> Packaging 中 设置Defines Module为YES 设置 Pr

IOS --- OC与Swift混编

swift 语言出来后,可能新的项目直接使用swift来开发,但可能在过程中会遇到一些情况,某些已用OC写好的类或封装好的模块,不想再在swift 中再写一次,哪就使用混编.这个在IOS8中是允许的. 先中简单的入手,先研究在同一个工程目录下混合使用的情况. 为了演示.先准备两个类 第一个是swift语言写的类,文件名为 act.swift   [cpp] view plaincopy在CODE上查看代码片派生到我的代码片 import Foundation    class Act : NSO

IOS --- OC与Swift混编(转)

原文地址:http://blog.sina.com.cn/s/blog_8d1bc23f0102v5tl.html swift 语言出来后,可能新的项目直接使用swift来开发,但可能在过程中会遇到一些情况,某些已用OC写好的类或封装好的模块,不想再在swift 中再写一次,哪就使用混编.这个在IOS8中是允许的. 先中简单的入手,先研究在同一个工程目录下混合使用的情况. 为了演示.先准备两个类 第一个是swift语言写的类,文件名为 act.swift import Foundation cl

关于C、OC、C++、OC++、Swift的一些常识

关于C.OC.C++.OC++.Swift的一些常识 OC是C语言的一个超集,是一门面向对象的语言,因为苹果的崛起而火,API主要是cocoa(OSX)和cocoatouch(iOS),GCC 和 Clang 都能编译OC,现在xcode使用的是Clang. OC的实现是建立在运行时机制(runtime system)之上的(runtime system 使用C写的),这使它与C++的编译机制有很大区别. 简单来说就是OC代码执行的时候需要结合runtime library,实现它的功能.正是因

初探swift语言的学习笔记九(OC与Swift混编)

swift 语言出来后,可能新的项目直接使用swift来开发,但可能在过程中会遇到一些情况,某些已用OC写好的类或封装好的模块,不想再在swift 中再写一次,哪就使用混编.这个在IOS8中是允许的. 先中简单的入手,先研究在同一个工程目录下混合使用的情况. 为了演示.先准备两个类 第一个是swift语言写的类,文件名为 act.swift import Foundation class Act : NSObject { func hasAct(tag:Int) -> String { swit

简单谈谈JVM中的GC(下)

在系列的最后,简单谈谈一些会有坑的JVM参数配置,以避免大家再多次踩坑 -XX:+DisableExplicitGC 很多的JVM标准配置中都有该选项,那么它究竟是干嘛的? 它会让System.gc()变成一次空调用,并不会真的发生一次Full Gc.除此以外,它还能避免第三方库定时引发的Full Gc(没错,说的就是RMI机制),看来很美好,对不对? 但有一种情况:应用本身GC正常,很久都不会Full Gc,但堆外内存增长很快,并且JVM启用了-XX:+DisableExplicitGC.你就