美文网首页
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)")

    相关文章

      网友评论

          本文标题:Swift与OC的区别

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