首页 > 其他分享 >iOS开发系列课程预告

iOS开发系列课程预告

时间:2023-06-20 14:02:33浏览次数:35  
标签:预告 语言 int 编程 iOS 程序员 课程 Objective Swift


最近在Mac和iOS上做开发,觉得应该写一点东西分享给感兴趣的童鞋们。在此之前,曾经有很多同行们都在埋怨苹果Objective-C的复杂和难以上手,为此也有很多人对今年(2014年)刚推出的Swift抱有很多幻想。首先在现阶段甚至五年以内,我个人感觉Mac和iOS的开发可以说仍然离不开Objective-C,即便是应用级(非系统级)的开发,招聘iOS程序员肯定还是看有没有扎实的Objective-C的功底,虽然苹果希望Swift能够取代Objective-C,但这一定是一个长期目标。在Swift的发布会上,库克说Swift会成为改变一切的语言,仅仅两个月之后,在TIOBE发布的编程语言排行榜上,Java和C++再创历史新低(当然我最钟爱的C语言仍然占据头把交椅,虽然它的Rating也下降了0.25%),而Swift作为一个新生儿直接抢占了第18名的宝座(大约100个程序员里面就有一个使用Swift的),人们对这个语言的期待可以说是异常的高。然而,我想说的是,Objective-C没有想象中的那么难,而Swift也不是轻松愉快就能玩转的,Swift同时接纳了两种编程理念或者叫范式(paradigm),面向对象编程和函数式编程,而在此之前,关于面向对象编程和函数式编程究竟孰优孰劣的争论很长时间都没有停止过。其实,真正理解两种编程范式的程序员不会武断的说这二者孰优孰劣,因为任何编程语言都没有什么灵丹妙药让其使用者成为优秀的程序员。又如牛人王垠说的,『无论任何事情,当走向极端时都是有害的。极端化时,面向对象编程和函数式编程都试图将整个世界装入其特有的模型中,但是这个世界是不依赖于我们的大脑的思考的情况下运转的。如果以为你有一个锤子,就把所有东西都当成钉子,这显然是不对的。只有通过认清我们的真实世界,才能摆脱信仰对我们的束缚。』『让你的模型适应世界,而不是让世界适应你的模型。』虽然我不喜欢王垠这个人,但是这段话我还是很赞同的。林锐博士也说过,『一个优秀的程序员不会宣称自己效忠于某种语言』,他们总是选择最合适的工具做自己想做的事。其实,即便你是一个Java程序员,如果你使用过访问者模式、命令模式,如果你使用过接口回调,你实际上已经使用了函数式编程的理念,同样,你也可以用C语言写出面向对象风格的代码。

Swift可以说是比JavaScript还大杂烩的大杂烩,从它身上你似乎不怎么能看到Objective-C的影子,但是却有JavaScript、C#、Java和其他一些我不了解的动态语言/函数式语言(如Ruby、Python、Haskell)的身影,只是这一点就注定了它『绝不简单』。其实苹果早在2010年就任命Chris Lattern为iOS开发下一代编程语言,经过4年的时间才打造出了Swift。简单的说,Swift是支持面向对象和函数式两种编程范式的语言,它在动态语言和静态语言之间寻找平衡点,既有静态语言的特征,也具体动态语言的神韵,同时它也是类型安全语言,又支持很多高级语言特性,包括闭包、泛型等。Swift能给非常方便的和C/C++/Objective-C进行混合编程,使用Unicode字符集。和Swift一起推出的是Xcode中的Playground,这个东西虽然让某些程序员觉得惊艳,但是其实IBM早在十年前就有类似的东西,只不过没有Playground那么炫罢了。最近看了苹果iPhone6的发布会,突然觉得对苹果的未来持悲观态度了,没有了乔帮主,苹果还能牛多久呢,谁也不知道。反正,作为一个程序员或者开发者,不管你选择使用Objective-C还是Swift,都会有很长的路要走,要经过各种修炼,其实Objective-C那种声明和实现分离的做法不就是在践行面向对象原则中的接口和实现分离,面向接口编程的理念吗,所以在我心中那是很优雅的。Swift中的protocol(协议)不也是如此吗,只不过protocol这个词容易让人误解,可能就叫接口(interface)或者契约会更好吧。下面给出一些链接帮助有兴趣的童鞋们阅读相关资料,同时附上一段用Objective-C写的代码,做的是一个计算机自己跟自己玩猜数字的小游戏。

面向对象编程语言中的函数式编程

王垠:面向对象和函数式编程的问题出在哪里?

TIOBE 2014年9月编程语言排行榜

下图展示了Xcode 6的新功能Playground:

iOS开发系列课程预告_Objective-C

用Objective-C写的猜数字游戏(计算机自己出一个1-100的随机数,然后自己来猜答案)

#import <Foundation/Foundation.h>

@interface Game : NSObject {
    @private
    int correctAnswer;
    NSString *hint;
}
- (Game *) init;
- (int) judge:(int)thyAnswer;
- (NSString *) getHint;

@end

@implementation Game

- (Game *) init {
    self = [super init];
    correctAnswer = arc4random() % 100;
    return self;
}

- (int) judge:(int)thyAnswer {
    if(thyAnswer == correctAnswer) {
        hint = @"恭喜你,答对了!";
    }
    else {
        if(thyAnswer < correctAnswer) {
            hint = @"大一点";
            return 1;
        }
        else {
            hint = @"小一点";
            return -1;
        }
    }
    return 0;
}

- (NSString *) getHint {
    return hint;
}

@end

int main() {
    Game *g = [Game new];
    int lower = 0, upper = 100;
    int result = 0;
    do {
        int myAnswer = (lower + upper) / 2;
        NSLog(@"I guess the answer is: %d", myAnswer);
        result = [g judge:myAnswer];
        NSLog(@"%@", [g getHint]);
        switch(result) {
            case -1:
                upper = myAnswer; break;
            case 1:
                lower = myAnswer; break;
        }
    } while(result != 0);
    NSLog(@"游戏结束!");
    [g release];
    return 0;
}



由于Mac系统是基于Unix的操作系统,因此打开终端程序可以通过键入命令的方式来编译和运行上面的代码,命令如下:

cc -framework Foundation 文件名.m (cc就是c-compiler,Unix系统的C编译器,也能够编译Objective-C并生成目标代码)

当然,上面的代码并不应当放在同一个文件中,@interface部分放在头文件(后缀名为.h的文件)中,而@implementation部分放在源文件(后缀名为.m的文件)中,一个定义接口,一个定义实现,做到接口跟实现分离,将来可以通过置换调实现文件来提供新的或者不同的功能。为此,你应该直接使用Xcode来建一个项目,如下图所示:

iOS开发系列课程预告_Swift_02

iOS开发系列课程预告_函数式编程_03

标签:预告,语言,int,编程,iOS,程序员,课程,Objective,Swift
From: https://blog.51cto.com/u_16166070/6522218

相关文章

  • Palera1n越狱简体中文,iOS15.0~16.5越狱支持Mac/Linux/U盘多平台
    Palera1n越狱简体中文,iOS15.0~16.5越狱支持Mac/Linux/U盘多平台中文教程:https://dkxuanye.cn/?p=6813官方文档:https://github.com/palera1n/palera1n/releases......
  • 数据结构和算法系列课程(02) --- 线性表和贪吃蛇
    线性结构是一种具有以下特点的结构:存在唯一一个被称为“第一个”的数据元素存在唯一一个被称为“最后一个”的数据元素除第一个元素之外,集合中的每个元素均有且仅有一个前驱除最后一个元素之外,集合中的每个元素均有且仅有一个后继那么,线性表、栈、队列、数组、字符串都可以......
  • 数据结构和算法系列课程(01)--- 排序二叉树和红黑树
    把排序二叉树放在这个系列课程的第一个部分似乎有些唐突,但是考虑到它在面试中出现的可能性,把它放在这样的一个位置也就不足为奇了。关于树和二叉树的基础知识,可以到下面的链接中下载我的课件进行了解。下面给出一个排序二叉树的Java实现:packagcom.loonstudio;/***排序二叉树......
  • 【直播预告】今晚7点,来HarmonyOS极客松直播间与技术专家聊聊新技术!
       ......
  • Python开发系列课程(18) - 网络编程入门
    网络编程入门计算机网络基础计算机网络是独立自主的计算机互联而成的系统的总称,组建计算机网络最主要的目的是实现多台计算机之间的通信和资源共享。今天计算机网络中的设备和计算机网络的用户已经多得不可计数,而计算机网络也可以称得上是一个“复杂巨系统”,对于这样的系统,我们不可......
  • Python开发系列课程(16) - 进程和线程
    进程和线程今天我们使用的计算机早已进入多CPU或多核时代,而我们使用的操作系统都是支持“多任务”的操作系统,这使得我们可以同时运行多个程序,也可以将一个程序分解为若干个相对独立的子任务,让多个子任务并发的执行,从而缩短程序的执行时间,同时也让用户获得更好的体验。因此在当下不......
  • Python开发系列课程(12) - 图形用户界面和游戏开发
    图形用户界面和游戏开发基于tkinter模块的GUIGUI是图形用户界面的缩写,图形化的用户界面对使用过计算机的人来说应该都不陌生,在此也无需进行赘述。Python默认的GUI开发模块是tkinter(在Python3以前的版本中名为Tkinter),从这个名字就可以看出它是基于Tk的,Tk是一个工具包,最初是为Tcl设......
  • Python开发系列课程(9) - 面向对象编程基础
    面向对象编程基础活在当下的程序员应该都听过“面向对象编程”一词,也经常有人问能不能用一句话解释下什么是“面向对象编程”,我们先来看看比较正式的说法。把一组数据结构和处理它们的方法组成对象(object),把相同行为的对象归纳为类(class),通过类的封装(encapsulation)隐藏内部细节,通过继......
  • Python开发系列课程(7) - 函数和模块的使用
    函数和模块的使用在讲解本章节的内容之前,我们先来研究一道数学题,请说出下面的方程有多少组正整数解。x1+x2+x3+x4=8x1+x2......
  • Python开发系列课程(3) - 分支结构
    分支结构分支结构的应用场景迄今为止,我们写的Python代码都是一条一条语句顺序执行,这种结构的代码我们称之为顺序结构。然而仅有顺序结构并不能解决所有的问题,比如我们设计一个游戏,游戏第一关的通关条件是玩家获得1000分,那么在完成本局游戏后我们要根据玩家得到分数来决定究竟是进入......