1、假设我是个刚入门的iOS开发人员,选swift学习呢,还是选objective-c学习,还是两个都学?

这个能够依据两种情况来决定:1、我想进入公司担任iOS开发的职位    2、我仅仅想做个独立开发人员,自己开发app公布。

第一种情况的话,你必须要学objective-c,如今市面上绝大部分的app都是用oc开发的,从oc到swift过渡是要非常长一段时间的。

当然swift最好也同一时候要学会。

另外一种情况:你不考虑兼容性(iOS7下面版本号,后面会提到)的情况下,全然能够仅仅学习swift。只是objective-c第三方开源库非常的丰富,有时间,不妨要学习了解oc。

随着时间的推移,肯定是转向swift的。

2、 我有多年的iOS  Objective-C的开发经验,相应swift,我还是新手吗?

在我看来,你不是新手了。由于你非常熟悉Xcode和Cocoa/Cocoa Touch API 。熟悉和学习这些API和工具过程比学Swift花的时间更长。

仅仅要花点时间熟悉使用Swift语法,

就能非常快的在项目中使用swift了。

3、iOS 8和OS X Yosemite的应用程序仅仅使用Swift语言么?

不是。Swift语言能与Objective-C流畅地交互,反之亦然。苹果并没有全然将Objective-C 的API转成Swift,但你仍能够在Swift代码中仍使用这些API。时间会证明,非常多年内iOS和OS X商店在採用Swift语言的同一时候仍会继续依赖Objective-C语言。

4、Swift语言适用于iOS的其它版本号和OS X系统么?

是的!Xcode 6能够为iOS 7及以上和OS X10.9及以上的系统版本号编译Swift代码。事实上,如今你从App Store下载的WWDC app就是苹果用Swift语言编写的。

可是,苹果如今还不同意使用Xcode Beta版本号创建的应用程序提交到App Store。因此,你须要等到Xcode 6正式版公布才干在App Store中上传Swift编写的应用程序。

5、Swift语言是代替Objective-C,还是仅仅是对Objective-C的补充?

引用苹果官方的一句话,“Objective-C不会消失,Swift和Objective-C可同一时候用于Cocoa和CocoaTouch开发。”因此,你仍然能够继续使用Objective-C。只是,苹果似乎鼓舞你使用Swift进行新的开发,而不是希望你重写全部的Objective-C代码。我们推測苹果在未来的框架和API开发中将会逐渐降低使用Objective-C语言,甚至有一天会弃用Objective-C,所以早作准备吧!

6、playground是什么?

playground仅仅是一个文件,你能够编写代码的同一时候即刻看到执行效果。对于学习Swift或者新的API、原型代码或者算法真的非常实用处!

參考11条,你就知道怎么创建和执行playground了。

7、怎样学习Swift?

苹果官方的教程 Swift Programming book

官方教程的中文翻译:http://numbbbbb.gitbooks.io/-the-swift-programming-language-/

这是我见过翻译最快的教程!翻译的又快又好。

WWDC 2014的Swift视频

8、有没有在Swift语言能够实现,但Objective-C下却不能实现的事情?或者反过来说。

有的。Swift是一门现代语言,引入了非常多Objective-C不支持的内容。比方命名空间(namspacing)、可选类型(optionals)、元组(tuples)、泛型(generics),类型判断(type inference)以及其它等等。当然,Objective-C也有一些Swift不具备的特性,比方messaging nil.

想了解很多其它细节,请阅读官方文档: Using Swift with Cocoa and Objective-C Guide

也能够看这里有: 中文版

9、有没有Swift不能用的API?

在写这篇文章时,我还没发现有。

10、Playground中,println()结果在哪里?

假设你打开了playground,还是看不见结果,那就执行那么的操作:

打开Assistant Editor才干看到控制台输出。步骤:View > Assistant Editor > Show Assistant Editor,

或者使用快捷键: Option + Command + Return.

11、怎样在打开Playgrounds和看到那些非常酷的值的图形?

两种方式打开Playgrounds:新建Playgrounds项目或在已有的项目里新建文件,选择playgrounds文件。

咱们看一段简单的代码,一个for循环,

for x in 1..10 {

x

}

下面是相应的playgrounds的截图

12、你怎样执行REPL?

在终端执行下面命令,告诉它使用Xcode 6的命令行工具。

sudo xcode-select -s /Applications/Xcode6-Beta.app/Contents/Developer/
然后执行下面代码開始Swift REPL。

xcrun swift
假设准备退出,你能够键入:exit或者:quit。你也能够使用CTRL+D快捷键。

12、你能用Swift来调用自己的Objective-C代码或者第三方库吗?假设能,要怎么做呢?

能够!当你往Xcode项目里加入第一个.swift文件时,系统会提示你让Xcode创建一个桥接头文件(bridging header file)。你能够在这个头文件里导入你希望可见于Swift代码的Objective-C头文件。然后,全部的类无需导入都可为Swift所用,你能够使用和系统类同样的Swift语法来使用自己定义Objective-C代码。  

13、数组能包不同的类型呢?

在Swift中,强烈建议使用仅仅包括一种类型的强类型数组,比方:
var  goodArray: String[] = [ "foo" ,  "bar" ]
从技术上讲,你能够创建包括多个类型对象的数组。但最好问问自己为什么这么做。多类型数组:
var  brokenArray: AnyObject[] = [ "foo" , 1, 12.23,  true ]

14、字典(dictionary)和原来一样吗?字典也是强类型(strongly typed)的吗?

是的,只是你依旧能够用AnyObject来解决。对于字典来说,它里边全部的值不是同一个类型也讲得通。下面是用字典表示的从server端返回的一个JSON响应:

来看一个serverJSON响应的样例,用字典来表示:

var  employee : Dictionary<String, AnyObject> = [ "FirstName"  :  "Larry" , "LastName"  :  "Rodgers" ,  "Salary"  : 65_000.00]
这个字典有两个String类型的键和一个Double值类型的键。直接是字典也是能够的,只是你最好创建一级类模型对象来表示这些数据,而不是依赖字典。

15、Swift怎样和Grand Central Dispatch一起使用?

同样的方法,你能够像在Objective-C中那样使用C API.在处理并发性时,你也能够使用苹果高级NSOperationQueue。

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), {
println( "test" )
});

16、Objective-C中的国际化宏命令呢?

相似Objective-C中的NSLocalizedString,

你能够在Swift中使用NSLocalizedString(key:tableName:bundle:value:comment:) 方法为国际化做准备

。tableName、bundle以及value arguments都有默认值,所以假设你正使用NSLocalizedString,你能够编写例如以下代码:

NSLocalizedString("Hello", comment: "standard greeting")

17、swift我须要考虑循环引用吗?

当然须要考虑!当两个对象彼此之间是强引用时,仍能创建一个retain cycle。你能够使用Objective-C中一样的方法break这个retain  cycle。有三个keyword用于声明引用类型,详情例如以下,弱引用和无主引用将解决你的引用生命周期问题。

何时使用强引用、弱引用以及无主引用呢?

强引用:强引用会使得ARC保留实例直到不再须要它们。当移除全部强引用时,引用实例就会被释放。注意默认情况下强引用是隐式的, 所以你不必显式地声明它。

弱引用:你应该在独立生命周期的对象间使用弱引用。当为一个对象设置弱引用时,假设出于内存压力释放了对象,表示你不介意这一点。弱引用的值必须是一个变量,使用var定义 ,而且必须是使用?运算符的Optional类型。由于弱引用是可选的,所以你决不能以一个已经不存在的无效实例的引用来结束。当引用实例被释放时,ARC将会自己主动把引用设 置为nil。

无主引用:你应该为有同样生命周期的对象使用无主引用;比方当一个对象指向其自身,以及你希望避免一个retain cycle。不管何时仅仅要引用有一个值就能够使用无主引用,但当你须要告诉ARC不要将它设置为nil时。无主引用的行为相似于Objective-C的unsafe_unretained。你要确保你不会在引用对象被释放后訪问引用,这样会导致你的 app崩溃。无主引用不能是可选的,不能被设置为nil。无主引用也是隐式解析。
 

18、怎样使用分号

分号在Swift中是可选的,只是出于易读性的目的,苹果建议你不要再使用分号了。但有时候仍会在Swift中使用分号,比方在循环语句中。

for var index = 0; index < 3; ++index { ... }

19、swift的接下来会怎样发展呢?

如今的swift仅仅是第一个版本号,苹果公司的目的非常明白,他们会迭代更新语言。所以你发现swift的bug,能够向苹果报告,或者要求添加一些新特性。

在该版本号正式公布之前,仍有非常大的提升空间。

20、CocoaPods怎么适用于swift项目吗?

Swift项目仍然是Xcode项目,而且支持多个target,可是有提升创建模块和自己定义框架能力的潜在空间。有可能会又一次改写CocoaPods以适应这个新特性。

有人使用CocoaPods协助Swift项目工作:https://medium.com/swift-programming/cocoapods-with-swift-e6f8ba8f0afc,而且机智的CocoaPods开发人员 已经在讨论这个问题了:here:https://github.com/CocoaPods/CocoaPods/issues/2218 。

说明:

本文主要參考的文章是:http://www.raywenderlich.com/74138/swift-language-faq

只是我不会逐字翻译,我在參考原文的基础上,加入了自己的想法,简单扼要的写下问题和回答。

总结swift语言常见的20个问题和回答的更多相关文章

  1. Swift语言指南(九)--基本运算符

    原文:Swift语言指南(九)--基本运算符 运算符(operator)是用来检查,改变或合并值的一种特殊符号或短语.例如,加号运算符让两个数字相加(如:let i = 1 + 2),还有些更复杂的运 ...

  2. Swift语言快速入门

    Swift语言快速入门(首部同步新版官方API文档和语法的Swift图书,确保代码可编译,作者专家在线答疑,图书勘误实时跟进) 极客学院 编著   ISBN 978-7-121-24328-8 201 ...

  3. 赶时髦过了一遍Swift 语言....

    Swift 语言 2014年6月3日发布,替代OBJECT-C Swift is a new programming language for creating iOS and OS X apps. ...

  4. Swift语言实战晋级

    Swift语言实战晋级基本信息作者: 老镇 丛书名: 爱上Swift出版社:人民邮电出版社ISBN:9787115378804上架时间:2014-12-26出版日期:2015 年1月开本:16开页码: ...

  5. swift语言实战晋级-第9章 游戏实战-跑酷熊猫-9-10 移除平台与视差滚动

    9.9 移除场景之外的平台 用为平台是源源不断的产生的,如果不注意销毁,平台就将越积越多,虽然在游戏场景中看不到.几十个还看不出问题,那几万个呢?几百万个呢? 所以我们来看看怎么移除平台,那什么样的平 ...

  6. iOS - Swift Swift 语言新特性

    1.Swift 2.0 带来哪些新变化 常规变化: 1.OS X 10.11.iOS 9 和 watchOS 2 SDK 采纳了一些 Objective-C 的特性用来提高 Swift 的编程体验, ...

  7. SWIFT语言的概览

    Swift用来写iOS和OS X程序.(估计也不会支持其它屌丝系统) Swift吸取了C和Objective-C的优点,且更加强大易用. Swift可以使用现有的Cocoa和Cocoa Touch框架 ...

  8. Swift语言 1小时速学教程

    本文由 张渊杰 (网名寂静)编写 Swift语言 1小时速学教程 写在前面的话 有些人可能想, 呵呵, 1小时学一门语言, 你不是搞笑吧, 我想说, 是的, 完全可以, 就要看你怎么学了 要想在1小时 ...

  9. Swift语言入门之旅

    Swift语言入门之旅  学习一门新的计算机语言,传统来说都是从编写一个在屏幕上打印"Hello world"的程序開始的.那在 Swift,我们使用一句话来实现它: printl ...

随机推荐

  1. JAVA客户端API调用memcached两种方式

    1. memcached client for java客户端API:memcached client for java 引入jar包:java-memcached-2.6.2.jar package ...

  2. javaweb学习总结(三十九)——数据库连接池

    一.应用程序直接获取数据库连接的缺点 用户每次请求都需要向数据库获得链接,而数据库创建连接通常需要消耗相对较大的资源,创建时间也较长.假设网站一天10万访问量,数据库服务器就需要创建10万次连接,极大 ...

  3. javaweb学习总结(三十六)——使用JDBC进行批处理

    在实际的项目开发中,有时候需要向数据库发送一批SQL语句执行,这时应避免向数据库一条条的发送执行,而应采用JDBC的批处理机制,以提升执行效率. JDBC实现批处理有两种方式:statement和pr ...

  4. linux c/c++ GDB教程详解

    学习使用了GDB一段时间后,发现它真的好强大!好用! GDB是GNU开源组织发布的一个强大的UNIX下的程序调试工具.或许,各位比较喜欢那种图形界面方式的,像VC.BCB等IDE的调试,但如果你是在U ...

  5. plsql 书写命名规范

    俗话说事不预则废,无规矩不成方圆. 对sql脚本程序的设计,个人认为应该是从编码规范开始. 前段时间公司一些同事提交的脚本,风格迥异,让我审核起来倍感难受,丝毫没有审核代码的快感. 特整理了公司部分常 ...

  6. 【HDOJ】1033 Edge

    题目英文太多,简单翻译了一下:1. For products that are wrapped in small packings it is necessary that the sheet of ...

  7. WCF - Developers Tools

    For developing a WCF service application, there are mainly two tools – Microsoft Visual Studio and C ...

  8. bzoj1565

    很明显是最大权闭合子图,但要注意互相保护的植物打不掉,被互相保护的植物所直接或间接保护的植物也打不掉我们先拓扑排序然后dfs出能打掉的点,然后做最大权闭合子图 ; type node=record p ...

  9. bzoj1266

    第一问不谈, 第二问首先我们要找出哪些是s到t的最短路上的边 由于是无向图,首先正反两遍最短路,求出是s到任意点的距离,任意点到t的距离(即t到任意点的距离): 然后穷举每条边判断是否在最短路上用d[ ...

  10. WordPress OptimizePress插件任意文件上传漏洞

    漏洞版本: WordPress OptimizePress Plugin 1.x 漏洞描述: WordPress是一种使用PHP语言开发的博客平台,用户可以在支持PHP和MySQL数据库的服务器上架设 ...