皮皮网
皮皮网

【酒水链源码】【源码丢了】【PHPVOD源码】objc 源码 nsstring

来源:缩量回踩成交密集区源码 发表时间:2024-12-22 15:09:56

1.如何评价 Swift 语言
2.[IOS黑魔法] - 语法糖(简单却不那么简单)

objc 源码 nsstring

如何评价 Swift 语言

       ç¿»å®ŒiBooks书店上的The源码 Swift Programming Language, 也下载了Xcode 6的beta版本来试验了一下。现在可以评价一下。如发现不对的地方,请在评论中指出,我斟酌后进行修正。

       ä¸»è¦ä»ŽæŠ€æœ¯çš„角度。而商业的角度,吸引开发者,共同维护苹果生态圈的繁荣等之类就不说了。

       æˆ‘不敢说swift学了有没有用,可不可以挣更多钱,但这门语言还是比较有意思的。swift骨子里面还是objc,但打扮过,比原来的模样漂亮。个人感觉,苹果还真的想用它取代objc呢。

       ------------------

       swift 跟 objc 共用同一套的运行时环境

       swift 的类型,可以桥接到 objc 的类型,反之亦然。如 string 对应原来objc的NSString, closures对应objc的block,等等。objc 积累下来的大量库,实现不用改写,swift 就直接可以使用。(最多加个声明文件)。看两个API的声明,对比一下

       objc

       void

       dispatch_apply(size_t iterations, dispatch_queue_t queue,

        void (^block)(size_t));

       - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event;

       swift

       func dispatch_apply(iterations: UInt, queue: dispatch_queue_t!, block: ((UInt) -> Void)!)

       func touchesBegan(touches: NSSet!, withEvent event: UIEvent!)

       æˆ‘怀疑,swift中的接口文件,是利用原来objc,c中的接口文件自动程序生成的。

       åŒä¸€ä¸ªå·¥ç¨‹ï¼Œå¯ä»¥åŒæ—¶ä½¿ç”¨swift, objc, c, c++ 四种编译语言(额外嵌入的脚本语言另算)

       åŽŸæ¥çš„ iOS/Mac 工程,已经可以同时使用objc, c, C++三种语言。现在支持第四种。objc, c, c++三种语言的结合很容易, objc跟c本身就兼容,objc跟c++结合只要将文件名改成.mm。而swift跟其它语言的结合,需要另外的文件进行桥接,其实也挺方便的。

       è¿™é‡Œçš„桥接很容易,Apple自家的各种 C 库移植过来了。比如Core Image/Audio,直接包含

       import CoreAudio

       import CoreImage

       å°±å¯ä»¥ä½¿ç”¨äº†ã€‚

       çŽ°åœ¨swift完全可以跟objc并存,原来的工程不建议重写,也不用重写。顺其自然,慢慢让它进化就是了。

       swift 写法看起来像脚本语言,但它是真正的编译语言

       åˆå­¦è€…,看它使用了

       let a = 4

       var b = "hello"

       æ²¡æœ‰ç±»åž‹å®šä¹‰ï¼Œå°±æƒ³å½“然的觉得它是脚本语言,解释执行,这是错误的。上面两行语句是用了类型推导,类似 C++ 里面的auto。swift跟objc的运行时环境一样,写的程序跑起来不会比objc慢。swift区分了struct和class, 分别使用传值跟传引用。适当地使用struct,应该会比objc要快一点。

       swift 吸收了很多其它语言的语法,写起来比objc简洁得多,不过它骨子里面的概念,跟原来objc差不多

       ç¼–程语言的语法重要,但是语法背后的概念更重要。比如面向对象,常用概念无非是,继承,多态,封装,信息隐藏等。继承又可能分成多重继承,接口继承,实现继承。或者还会有些嵌套类,嵌套函数等等。

       å½“明白语法背后的概念,知道为什么需要有这些东西。之后从一门语言切换到另一门有着相同概念的语言,其实很容易。

       è€Œè¯­æ³•ä¼šå½±å“è¡¨è¾¾ï¼Œç†è®ºä¸Šæ¯é—¨è¯­è¨€éƒ½å¯ä»¥è¡¨è¾¾ä»»ä½•æ¦‚念。不过当某种概念在某门语言中,很难表达出来,就会倾向于不这样使用它,这种概念在那门语言的社区就难以被人熟知。

       æ„Ÿè§‰ä¸Šï¼Œswift有着 obj-c, C++, Ruby的影子。

       æš‚时,我自己最喜欢的3个特性有

       tuple,终于可以返回多个数值了。一行交换两个值。C++里面的tie+tuple也可以实现类似功能,不过使用库,显得噪音太多。

       closure,喜欢它的简写,还有在函数最后一参数,可以写在()外面。这些特性,用来写函数式风格的程序,会很好看。而原来objc的block, 还有c++的function, 就太啰嗦了。

       switch,case里面的条件匹配。

       è¿™äº›è¯­æ³•ï¼Œç¼–译最后还是会映射成原来objc的运行模型。原来objc的概念,引用记数,ARC, 属性,协议,接口,初始化,扩展类,匿名函数等等,继续有效。

       æˆ‘å°†swift看成是objc的一块大大的语法糖。

       æœ‰ä¸ªå¤§å—头的东西,是原来objc没有的,就是泛型。swift中 将那种操作写一次,就可以作用多个类型的语法叫做generics(泛型),而C++中称为template(模板),叫法不同,本质是同样的东西。

       æ€»çš„说来,swfit 涵盖了现在流行的编程方式,结构化,面向对象,泛型,函数式。

       swift的新语法,可以很好地支持内部DSL

       æœ‰ä¸€ç§ç¼–程风格,不太好归类。就是将程序拆分成,描述+解释。解释部分写一次,其它地方使用描述式的语句,而不是命令式的语句。

       å†…部DSL,通常利用主语言的语法特性,创出一套写法,来写一些描述性的语句。这些语句组合起来,就像一门新语言似得。这个比较难理解。举个例子(从ruby那里借过来的),假如计算,几小时之后的秒数。C语言中,大概会写成

       getHourSeconds(3)

       è€ŒçŽ°åœ¨ swift中,只要定义了扩展

       extension Int

       {

        var hours:Int

        {

        return self *

        }

        var ago:Int

        {

        return -self

        }

       }

       å°±å¯ä»¥å†™æˆ

       3.hours

       3.hours.ago

       åˆ†åˆ«æ˜¯3小时后的秒数,3小时前的秒数。

       åŒç†ï¼Œä¹Ÿå¯ä»¥å†™æˆ

       .days

       .days.ago

       è¿™ç§å†™æ³•ï¼Œçœ‹èµ·æ¥è·ŸåŽŸæ¥çš„命令式写法完全不同。这些程序是描述性的。原来的objc, 做不到这点。 我估计swift以后会冒出大量这样风格的库。

       è¿™ç§é£Žæ ¼ï¼Œåˆ°åº•å¥½ä¸å¥½ï¼Œè¦çœ‹æƒ…况。比较方便定义内部DSL的语言, 我自己知道的有C++, Ruby, Lisp。现在多了Swift。

       è®¤ä¸ºæ‰€æœ‰äººéƒ½æ˜¯0基础的,是错误的

       æœ‰äº›äººå­¦å¾—特别快,因为之前的基础好。语言的语法只是表面,表面的东西总是变动得比较快的。底下的东西重要得多,而看不见。水面一块冰,有些人是冰山露出一角,有些人是无根的浮冰。看起来差不多,其实差别十分之大。

       æˆ‘相信有些人,在两个小时之内就可以使用这门新语言。

       ææé‚£ä¸ªPlayground

       ä¹‹å‰è‹¹æžœçš„员工,Bret Victor 演讲过个视频。提到这个这种可视化编程。当我们每一步操作,都得到实时地反馈,我们的做法会有很多不同,做出的东西也会不同。这个Playground,用来学习swift的特性很好用,不过我还不知道怎么才能跟工程结合起来使用,不作评论。

       çŽ°é˜¶æ®µï¼Œæˆ‘自己的做法

       æˆ‘自己写的新项目,将会有一部分使用swift来编写。但还是会以objc为主。发觉现在Xcode 6 beta版本,对swift的语法提示支持不好,不能打几个字母就自动完成。再观察一阵子。

       æˆ‘不敢展望太多,或者预测什么,通常提前预测都是错的,会让人抓住把柄。但感觉Apple发布swift, 绝不是玩玩而已。

[IOS黑魔法] - 语法糖(简单却不那么简单)

       在进行程序开发时,我特别喜欢使用语法糖来简化代码,源码这样既能保持代码的源码简洁,又能提高可读性,源码减少出错的源码机会。下面,源码酒水链源码我将分享一些在iOS开发中使用语法糖的源码实践经验和心得,希望能对大家有所帮助。源码如有更好的源码补充或有疑问,请随时与我分享,源码让我们一起成长。源码

       ### OC语法糖

       在Objective-C中,源码一些语法糖可以让你的源码源码丢了代码更加优雅。比如,源码对于数组和字典的源码初始化与访问,我们可以采用更简洁的方式。

       #### 数组初始化与访问

       在初始化数组时,我们常常会这样编写:

       objc

       NSArray *myArray = @[@"Apple", @"Banana", @"Cherry"];

       通过语法糖,我们可以简化这一过程:

       objc

       NSArray *myArray = [NSArray arrayWithObjects:@"Apple",PHPVOD源码 @"Banana", @"Cherry", nil];

       这样不仅代码更简洁,也更容易阅读。

       #### 字典简化

       对于字典的初始化与访问,语法糖同样能带来便利。例如:

       objc

       NSDictionary *myDict = @{ @"key1": @"value1", @"key2": @"value2"};

       通过语法糖,我们可以简化为:

       objc

       NSDictionary *myDict = @{ @"key1": @"value1", @"key2": @"value2"};

       这样的写法虽然与上面的例子相同,但在实际应用中,GreenJVM源码它能帮助我们更快速地理解代码意图。

       #### NSNumber简化

       在处理数字时,通过语法糖可以更直观地进行转换与访问。例如:

       objc

       NSNumber *number = [NSNumber numberWithInt:];

       通过语法糖,我们可以简化为:

       objc

       NSNumber *number = [NSNumber numberWithInt:@"c"];

       这个例子说明了字符转换为数字时的ASCII码表示。在某些上下文中,梧州源码这种简洁的表示方式更加直观。

       ### @()语法糖

       在Objective-C中,`@`符号可以被理解为一个特殊的宏,它根据传入的C字符串类型(常量或字符串)在运行时构建返回不同类型的NSString。例如:

       objc

       NSString *str = @”Hello, world!”;

       这实际上等价于:

       objc

       NSString *str = [NSString stringWithString:@"Hello, world!"];

       使用宏`@()`可以避免在编写字符串时的繁琐,简化代码。

       ### UI语法糖

       在UI开发中,语法糖也能显著提升代码的可读性。例如,在Swift中,我们可以使用语法糖简化UI元素的创建:

       swift

       let imageView = UIImageView()

       imageView.image = UIImage(named: "image")

       ### Swift语法糖

       Swift语言中,`if let`和`guard`语法糖简化了条件判断与异常处理,使得代码更加简洁。例如:

       #### if let 与 guard语法糖

       在Swift中处理optional类型时,`if let`和`guard`可以替代传统的if语句,使得代码更清晰。例如:

       swift

       if let value = optionalValue {

        // 使用 value

       }

       对比传统的写法:

       swift

       if optionalValue != nil {

        // 使用 optionalValue

       }

       `guard`语法糖则进一步简化了条件判断,避免了过多的嵌套,例如:

       swift

       guard let value = optionalValue else {

        // 处理 optionalValue 为空的情况

        return

       }

       // 使用 value

       ### 语法糖Selector例子

       在处理UI事件,尤其是为多个按钮添加点击事件时,使用语法糖可以简化Selector的管理。例如:

       #### 为按钮添加点击事件

       通过语法糖,我们可以更方便地为视图控制器中的按钮添加点击事件,避免代码过于臃肿:

       swift

       class ViewController: UIViewController {

        override func viewDidLoad() {

        super.viewDidLoad()

        // 为按钮添加点击事件,使用语法糖简化代码

        let button = UIButton()

        button.addTarget(self, action: #selector(buttonClicked(_:)), for: .touchUpInside)

        }

        @objc func buttonClicked(_ sender: UIButton) {

        // 处理点击事件

        }

       }

       这样不仅代码整洁,还能更直观地管理不同按钮的点击事件。

相关栏目:探索