首页系统apple swift(apple swift)

apple swift(apple swift)

编程之家2024-05-20104次浏览

一、Swift能代替Objective-C吗

这是我在网上上看到的答案,复制粘贴过来和大家分享一下,因为我和很多人一样很关心Swift的出现对Mac开发的影响和对Objective-C的影响。

apple swift(apple swift)

我文章的中心是,以 Apple目前给出的各种资料来看,这语言不会替代掉ObjC,它不是下一代的ObjC。它有很多缺点,使得它不足以做大型项目。这些缺点使得,Apple自己都没有使用它做 Mac/iOS的 app。我不排除明年后年它有很大改进,但至少现在还没有这端倪。

因此,如果你会ObjC,你不需要去看它。

但你如果问我这语言对普通开发者重要不重要,我说重要,可以明确告诉你这一点--它是 Apple在 WWDC向全世界推出的重磅语言我怎麽能说它不重要?它降低了入门的门槛。使得大量的 JS, Python, Ruby用户会使用 Apple的技术为其开发程序。它的作用,和 Core Data, Interface Builder一样,能让你快速写出一个能用的程序来。但如果你想稍做些正经事,就心有馀力不足了。所以和 Apple自己的 Mail也不会去用 Core Data,自己 iPhoto不会去用 UICollectionView,稍复杂的 App都不会去用 Interface Builder一样,Apple自己不会用 Swift。它只是给三五个人的小团队能迅速做出能用的程序,让大公司能快速做些 Prototype而已。

====

有人说它相当于 C#,或是相当于 Scala对 Java的改进,我可以告诉大家,Swift不是这样的语言。它更像一种让人快速做原型的 toy language。

要求 Apple发布下一代 Objective-C语言的呼声早就有了,每年写数万字 OS X评论的 Ars Technica两年前就写了 Apple应该去做一个语言,Objective-C without C并且使用更现代的功能和更短的 API,以及对自动类型推导的支持,文章见 OS X 10.8 Mountain Lion: the Ars Technica review。

apple swift(apple swift)

但 Apple显然没有认真对待这门语言。很明显的,他们根本不想把ObjC给替换掉。并且按Apple的风格,如果他们把Swift当ObjC的未来来对待,肯定会有一到两个iOS/Mac应用使用Swift改写。(比如Apple当年要砍 Carbon,首先做的就是把 Finder重写了)。

从语言角度,Swift有太多的缺点:

它的标准库太差,只有Dictionary, Array和 String及数这几种数据结构,连个 Set都没有。想用别的?你还是要用 ObjC的。是的,当你用原生数据结构时,速度比ObjC快。但是那仅限于那几个。它没有任何对异步/同步编程的支持。它没法绑定使用 Grand Central Dispatch,因此任何正经的网络应用根本无法编写。

它没有任何的保护机制(private, protected),所有的 method和 variable都是全局可见的,这显然不能满足正经工程项目的需要。

只能和 ObjC互动。如果你想正经地使用C或者C++,你得写 ObjC的 wrapper。这基本限制了你使用大量的 C/C++库函数。

没有办法 catch Objective-C的 exception,如果一旦出了 exception,你的 App立马就崩了。这也基本限制了你使用很多 ObjC旧代码库。

apple swift(apple swift)

Chris在设计这门语言时,可以明显地看到他的短视。这也很正常,他是一个做编译器的,不是做语言研究的。所以这门声称支持函数式编程的语言,根本没有大多函数式语言都普遍存在的功能:

仅有的支持在lazy,闭包,及简单的函数语言函数(如map, filter)。这ObjC中都能做

没有pattern matching

类型推导差不多和 C++11差不多,没有使用hindley milner

从上面这些特点看, Apple对其的定位仅是给对ObjC头疼的开发者降低学习曲线所推出的玩具语言。前面五条中的每一条,基本都是致命的,因此 Apple自己的项目也不会使用。做个早期 proof of concept的 prototype到是可以的。

我可以想象,实现上 Swift是很简单的(LLVM很成熟了,写个新语言越来越简单,比如只要几步就能做个小语言: 1. Kaleidoscope: Tutorial Introduction and the Lexer),当然有可能 Apple将来会解决这些问题使得其真正实用。但现在来看,Apple并不希望 Swift来替代 Objective C。

二、苹果的编程语言 Swift 是用什么开发的

Swift是什么?

Swift是苹果于WWDC 2014发布的编程语言,这里引用The Swift Programming Language的原话:

Swift is a new programming language for iOS and OS X apps that builds on the best of C and Objective-C, without the constraints of C compatibility. Swift adopts safe programming patterns and adds modern features to make programming easier, more flexible and more fun. Swift’s clean slate, backed by the mature and much-loved Cocoa and Cocoa Touch frameworks, is an opportunity to imagine how software development works. Swift is the first industrial-quality systems programming language that is as expressive and enjoyable as a scripting language.

简单的说:

Swift用来写iOS和OS X程序。(估计也不会支持其它屌丝系统)

Swift吸取了C和Objective-C的优点,且更加强大易用。

Swift可以使用现有的Cocoa和Cocoa Touch框架。

Swift兼具编译语言的高性能(Performance)和脚本语言的交互性(Interactive)。

Swift语言概览

基本概念

注:这一节的代码源自The Swift Programming Language中的A Swift Tour。

Hello, world

类似于脚本语言,下面的代码即是一个完整的Swift程序。

println("Hello, world")

变量与常量

Swift使用var声明变量,let声明常量

var myVariable= 42 myVariable= 50 let myConstant= 42

类型推导

Swift支持类型推导(Type Inference),所以上面的代码不需指定类型,如果需要指定类型:

let explicitDouble: Double= 70

Swift不支持隐式类型转换(Implicitly casting),所以下面的代码需要显式类型转换(Explicitly casting):

let label="The width is" let width= 94 let width= label+ String(width)

字符串格式化

Swift使用\(item)的形式进行字符串格式化:

let apples= 3 let oranges= 5 let appleSummary="I have\(apples) apples." let appleSummary="I have\(apples+ oranges) pieces of fruit."

数组和字典

Swift使用[]操作符声明数组(array)和字典(dictionary):

var shoppingList= ["catfish","water","tulips","blue paint"] shoppingList[1]="bottle of water" var occupations= ["Malcolm":"Captain","Kaylee":"Mechanic", ] occupations["Jayne"]="Public Relations"

一般使用初始化器(initializer)语法创建空数组和空字典:

let emptyArray= String[]() let emptyDictionary= Dictionary<String, Float>()

如果类型信息已知,则可以使用[]声明空数组,使用[:]声明空字典。

控制流

概览

Swift的条件语句包含if和switch,循环语句包含for-in、for、while和do-while,循环/判断条件不需要括号,但循环/判断体(body)必需括号:

let individualScores= [75, 43, 103, 87, 12] var teamScore= 0 for score in individualScores{ if score> 50{ teamScore+= 3} else{ teamScore+= 1}}

可空类型

结合if和let,可以方便的处理可空变量(nullable variable)。对于空值,需要在类型声明后添加?显式标明该类型可空。

var optionalString: String?="Hello" optionalString== nil var optionalName: String?="John Appleseed" var gretting="Hello!" if let name= optionalName{ gretting="Hello,\(name)"}

灵活的switch

Swift中的switch支持各种各样的比较操作:

let vegetable="red pepper" switch vegetable{ case"celery": let vegetableComment="Add some raisins and make ants on a log." case"cucumber","watercress": let vegetableComment="That would make a good tea sandwich." case let x where x.hasSuffix("pepper"): let vegetableComment="Is it a spicy\(x)?" default: let vegetableComment="Everything tastes good in soup."}

三、apple 为什么用python和swift相比较而不是和别的语言相比

看到两个有意思的解答,你可以参考一下

一、

1. JavaScript

因为JavaScript有Google V8 JIT加持后,速度快得不行.

不能突出那种统计学意义上的压倒性速度优势

而且Apple自己也在大力优化Webkit等Web项目

跟JavaScript比,显然是不合时宜的.

把JavasScript秒了,不是打了Safari团队的脸么?

2.同理, MacRuby好歹也是半个自己人.

3. Python.

黑Python,既不会让Python社区反感(我们总是以写得快,跑得慢自黑的.哈哈),又能表现出自己速度快,给那些不大懂编程的记者们看.多好!

WOW,快看Apple再次发明了一个程序语言,速度秒杀一个叫Python的200倍耶!

4.地表最好语言 PHP

这个量Apple也没胆量黑.

二、

因为 Swift的很多特性和Python似(Python是个程序员都会喜欢的语言)。借鉴了很多新语言的新特性。性能却更好,这是个很好的卖的。

一楼说到 JS,我说Swift和JS根本不像,而和Python却很像。JS是闭包的世界,而Swift本质上OO的,而且JS运用的场景也不一样。说PHP是最好的语言?且不说它主要用来做Web,PHP真的是个很混乱的语言。

python教程是什么(python官方教程)应用服务器没有开(应用服务器没有开是什么意思)