美文网首页
Swift与OC的区别

Swift与OC的区别

作者: LHsunshine | 来源:发表于2017-08-29 16:29 被阅读0次

Swift与OC的区别

1、基础篇

Swift---OC

2、监听方法

OC      使用 @selector(actionName)

Swift   直接使用字符串,提示:可以先用智能提示敲出方法名,然后增加引号

oc

-(void)test{

           UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];

          [button addTarget:self action:@selector(didClick:) forControlEvents:UIControlEventTouchUpInside];

}

-(void)didClick:(UIButton*)button{

}

swift

override func viewDidLoad() {

        // 创建按钮

         let  btn =UIButton(type:UIButtonType.ContactAdd)        

         v.addSubview(btn)

        // 监听方法

        btn.addTarget(self, action:"clickButton", forControlEvents: .TouchUpInside)   

 }

func  clickButton(btn: UIButton){

        print(__FUNCTION__)

         print(btn)  

  }

如果有参数直接增加 ':'


3、常量与变量声明

oc的变量声明使用  类型 变量名 = 变量值的方式,其中类型为系统内置数据类型或自定义类型,变量名需由英文字母开头且不能包含特殊字符

swift变量声明使用 var 变量名 = 变量值的方式,其中变量名可以使用任何你喜欢的字符,甚至是表情符号emoji等

oc常量声明使用const放在变量定义前即为声明常量,如:const NSString *str = @"Hello";

swift常量声明使用 let 常量名 = 常量值的方式,同样可以使用任何你喜欢的字符作为常量名

swift 可以自动推断出常量与变量的数据类型,当然也可以使用“:数据类型”的方式指定其具体数据类型,如 let age:Int = 10

PS:swift严格要求变量在使用前必须进行初始化,如上所示,必须给定变量值,而oc则不强制


4、属性和变量(propertry,variable)

在OC中使用属性一般都使用如下格式:

           @property (strong,nonatomic) NSString *string;

而在Swift中的属性一般都使用如下格式:

           class Shape { var name = "shape"}

在oc中可以直接与变量打交道,swift中则行不通,在Swift的世界里,我们只与property打交道。在Swift中,属性分为存储属性和计算属性。简单来说,就是存储属性能够保存值,而计算属性只提供getter与setter,利用存储属性来生成自己的值。计算属性更像方法,而不是传统意义的属性。但是这样一个特性存在,使得我们更容易组织我们的代码。

构造变量

              在OC中,只能通过单例,或者static变量加类方法来构造类变量:

@interface Model

+ (int) value;

+ (void) setValue:(int)val;

@end

@implementation Modelstatic

       int value;

      + (int) value{

@synchronized(self) {

       return value;

}

+ (void) setValue:(int)val{

       @synchronized(self) {

                value = val;

}

}

@end

// Foo.h@interface Foo {}

+ (NSDictionary *) dictionary;

// Foo.m oc单例

+ (NSDictionary *) dictionary{

       static NSDictionary* fooDict = nil;

        static dispatch_once_t oncePredicate;

        dispatch_once(&oncePredicate, ^{

         // create dict

        });

        return fooDict;

}

               在swift中,可以通过清晰的语法便能定义类变量,通过static定义的类变量无法在子类重写,通过class定义的类变量则可在子类重写。

struct SomeStructure {

         static var storedTypeProperty = "Some value."

         static var computedTypeProperty: Int {

         return 1

         }

        class var overrideableComputedTypeProperty: Int {

                   return 107

         }

}

//swift单例

class singletonClass {

          static let sharedInstance = singletonClass()

           private init() {} 

         // 这就阻止其他对象使用这个类的默认的'()'初始化方法

}


5、控制语句

分支语句: if,switch和guard(新增)

if后面的语句必须为bool类型,可以不加括号

switch 可以支持Int,Float,Double,String,Tuple等AnyObject,无需break

guard 是Swift2.x新增关键字,必须配合else使用,解决if-else多层嵌套问题,判断一个条件为true下执行某语句,否则终止或跳转执行其他语句

循环语句: while, repeat-while,for(改动),for-in

for循环 摒弃掉了c的style,一律以...来替代,不得不说很赞。

for i in 1...arr.count{

//循环体

}

swift专门提供了遍历集合的方法for-in

let numbers = [1,2,3,4,5,6,7,8,9,10]

for (index,element) in numbers.enumerate(){

print("Item \(index) : \(element)")    //index和item都有了

}

swift中的for循环提供了类似NSRange方式的跨步查找方式

for index in stride(from: 1, through: 5, by: 2) { print(index)}

跳转语句: break,continue,fallthrough(新增),return,throw(新增)

fall through 是贯通语句,只能在switch中使用,如果一个case执行完毕,需要执行另一个case,则需要用fallthough跳转至下一个case

throw 在oc中的NSError一定很熟悉了,在swift里,借助java的try..catch语句可以将程序中抛出(throw)的异常收集起来。

值绑定: 常用于if,guard,switch,where

在控制语句中将表达式的值临时赋给一个常量或者变量,这些常量或者变量可以在该控制语句中使用,称为"值绑定"。

where语句类似于sql中的where语句,非常好用。

//switch中使用元祖类型

var student = (id:"1002",name:"李四",age:32, ChineseScore:80, EnglishScore:89)

var desc: String

switch student {

case (_, _, _, 90...100, 90...100) where age > 20:  //where语句

desc = "优"

case (_, _, _, 80...90, 80...90):

desc = "良"

case (_, _, _, 60...80, 60...80):

desc = "中"

case (_, _, _, 60...80, 90...100), (_,_, _, 90...100, 60...80):

desc = "偏科"

case (_, _, _, 0...80, 90...100), (_,_, _, 90...100, 0...80):

desc = "严重偏科"

default:

desc = "无"

}

print("说明:\(desc)")

相关文章

  • OC与swift的区别

    OC与Swift的区别一(文件结构) OC与Swift的区别一(常量、变量、运算符) OC与Swift的区别三(条...

  • Swift语言基础

    //Swift 与 OC 的区别

  • swift5版本学习

    swift与OC区别:swift与OC1、Swift容易阅读,语法和文件结构简易化。2、Swift更易于维护,文件...

  • Swift--001:Swift编译 & SIL分析

    Swift与OC编译区别 swift与oc编译区别Swfit使用前端编译器swiftc,降级编译成IR,再通过后端...

  • Swift基础:一.Swift与OC区别:

    一.Swift与OC区别: 1.swift程序的入口是UIApplicationMain; 2.OC的类是...

  • ios面试

    一、OC与Swift的区别 1.swift是静态语言,有类型推断,OC是动态语言。2.swift面向协议编程,OC...

  • iOS面试

    # 一、OC与Swift的区别 1.swift是静态语言,有类型推断,OC是动态语言。 2.swift面向协议编程...

  • OC与Swift的主要区别

    swift与OC的主要区别就是语法区别,其他大抵相同. 区别1: swift中使用let定义常量,var定义变量....

  • Swift与OC的区别

    Swift与OC的区别 1、基础篇 2、监听方法 OC 使用 @selector(actionName) Sw...

  • 【Swift】oc与Swift混编方法调用

    本文不介绍桥文件搭建和类的导入,只是阐述oc与swift函数方法的小区别 oc中有类方法与对象方法,调用swift...

网友评论

      本文标题:Swift与OC的区别

      本文链接:https://www.haomeiwen.com/subject/yyoulxtx.html