零基础上手Swift快速入门教程概览

Swift是苹果的品牌新的编程语言,在2014年WWDC(苹果开发者大会)上发布的编程语言。
随着Swift语言的发布,苹果也发布了一个出色的SWIFT的参考指南,这里强烈推荐。
但是这个学习指南又长又瘦!所以,如果没有很多的时间,只是想快速学习Swift,那么本教程就是为你准备的。
本 Swift 教程将需要大约25分钟学习,给出 Swift 语言一个快速浏览,包括变量,控制流,类等以及更多的最佳实践。
对于本Swift教程,需要Xcode最新版本(在写这篇Swift教程的时候使用的是Xcode 6.1.1)。学习本教程之前不需要任何Swift和Objective-C的经验,但如果有一些编程经验,但这会对理解和学习有帮助。
注意: 请确保有最新的Xcode(在Mac App Store检查以确保)。Swift正在发生迅速的变化,我们正在竭尽所能为每一个测试版更新本教程; 代码可能无法正常工作在旧版本的Xcode中的或预发行版本中。
Playgrounds简介
启动 Xcode 6, 并转到 File\New\File. 选择 iOS\Source\Playground, 并点击 Next.

命名文件为 SwiftTutorial.playground, 并点击 Create, 并保存在一个方便的地方. 删除其它不用的文件,以保持一个干净的文件目录.
playground 是一种文件类型,并且允许测试 Swift 代码, 可以侧边栏查看每一行的结果. 例如:添加以下行到 playground 中:

代码如下:

let tutorialTeam = 60
let editorialTeam = 17
let totalTeam = tutorialTeam + editorialTeam

当编写输入这些行,会看到侧边栏上的每一行的结果。是不是很方便?
Playgrounds是学习Swift一个很好的方式(比如这个Swift教程)来试验新的API,原型代码或算法,或可视化绘制代码。 在本Swift教程的其余部分,将使用 playground。
注意: 在这一点上,建议拖动playground文件(SwiftTutorial.playground)到OS X Dock中。
通过这种方式,可以测试一些代码,Swift使用此文件作为一个快速的暂存器。 当然,对于这个工作,必须有playground在一个地方,不能随便移动它。
Swift变量VS常量
尝试添加下面一行到 playground 的底部:

代码如下:

totalTeam += 1

当加入这一行,会发现有一个错误。 这是因为 totalTeam 是一个常数,这意味着它的值永远不会改变。Swift中使用关键字 let 声明常数。
如果想要 totalTeam 是一个变量,它的值可以随时被改变 - 声明它需要用不同的关键字: var。
要做到这一点,初始化 totalTeam 使用以下行来替换之前的声明:
var totalTeam = tutorialTeam + editorialTeam
现在它能正常工作了!可能就会像你自己认为的那样了,“为什么不使用var声明一切呢,无需有那么多的限制?”
好吧,使用 let 来声明一个常量是最好的做法,因为这允许编译器进行优化。所以请记住:尽可能使用 let 来声明常量!
显式与推断输入
到目前为止,还没有明确设置这些常量和变量的类型,因为编译器有足够的信息来自动推断出它。
例如,设置 tutorialTeam 为 56,编译器知道56是一个int类型,所以它会自动设置oftutorialTeam类型为int。
但是,如果你想要也可以设置明确类型。尝试通过设置tutorialTeam的类型如以下的行:

代码如下:

let tutorialTeam: Int = 60

如果不知道明确类型,或者让编译器推断类型并自动设置。这是比较好的做法,可在自动情况下让编译器推断出类型,因为这是 Swift 的主要优势之一:简洁,易于代码阅读。
因为这个,切换回之前的那行使用推断输入(自动识别类型):

代码如下:

let tutorialTeam = 60

Swift基本类型和控制流
到目前为止,已经看到了 Int 的解释,这是Swift用于整数值类型的例子,但是还有更多。
尝试使用一些基本类型,下面每个部分粘贴在 playground 的底部。
Floats 和 Doubles


代码如下:

let priceInferred = 19.99
let priceExplicit: Double = 19.99

有两种类型的小数点值,如:Float 和 Double。Double有更多的精确度, 并且默认是十进制值。这意味着 priceInferred 是 Double  类型。

代码如下:

Bools
let onSaleInferred = true
let onSaleExplicit: Bool = false

请注意,在 Swift 中使用 true/false 作为布尔值(在 Objective-C 中使用 YES/NO ,所以它们有点不同)。

代码如下:

Strings
let nameInferred = "Whoopie Cushion"
let nameExplicit: String = "Whoopie Cushion"

字符串是如你所期望那样,但请注意,不再像在 Objective-C 中使用 @ 符号了。
if语句和字符串插值


代码如下:

if onSaleInferred {
  println("\(nameInferred) on sale for \(priceInferred)!")
} else {
  println("\(nameInferred) at regular price: \(priceInferred)!")
}

这是一个if语句的一个例子,就像在其它的编程语言一样。条件的括号是可选的,大括号是必需的,即使只有1行语句。
这里说明一个叫做字符串内插的新的技术的一个例子。在Swift中每当想要替换字符串中东西,只需使用此语法:\(表达式)。
在这一点上,可以看到在侧边栏中 println 的结果,由于空间有限它可能不好看到。要查看输出,将鼠标移动到该行,并单击出现的眼珠子(图标):

还有一个可以看到输出方法。去到Xcode的主菜单,然后选择 View\Assistant Editor\Show Assistant Editor.

助理编辑器会告诉你的代码中任何println语句的结果,并将结果值显示在一个方便的地方,这往往比使用鼠标放在每一行更容易。
类与方法
在Swift开发中会创建类和方法,这是最常见的作法,让我们来看看!
首先,删除在playground文件的一切内容,以便可以在一个干净的文件中开始新的代码编写。
接下来,将创建一个小费计算器类,以帮助描绘餐厅。 一次添加一小块代码,在这里将一步一步地解释。

代码如下:

// 1
class TipCalculator {

}

要创建一个类,只需在class关键字后输入类的名称。然后,类的主体使用一个大括号。
如果是继承另一个类,使用一个 :符号,后面是继承的类的名称。请注意,不一定需要继承(不像在Objective-C,在那里必须继承NSObject 之类的东西或派生自NSObject)。
添加以下代码在大括号内:

代码如下:

// 2
  let total: Double
  let taxPct: Double
  let subtotal: Double

添加这些后会出现一些错误,但不用担心,接下来很快就会解决这些问题。
这就是如何在一个类中创建属性 – 和创建变量或常数的方式相同。在这里,将创建三个常量的属性 – 一个是法案的总额(税后), 一个用于应用到法案的税收比例,一个用于法案的小计(税前)。
请注意,任何属性当声明它们时,声明必须为它们设置初始值,或者在初始化时 –这就是为什么当前会有错误。如果不希望为属性设置初始值,必须声明它们作为可选(更多,在未来的教程)。
在之前创建的块之后添加代码(花括号内):

代码如下:

// 3
  init(total: Double, taxPct: Double) {
    self.total = total
    self.taxPct = taxPct
    subtotal = total / (taxPct + 1)
  }

这将为类创建一个初始化器并使用两个参数。初始化器在 Swift 的名称总是为 init – 但可以有多个(如果必要的话),可采用不同的参数。
请注意,这里已经给这个方法使用了参数,与这个类的属性的名称相同。正因为如此,需要通过将自身前缀在属性之前,以区分两者
请注意,由于没有 subtotal 属性,所以不会有名称冲突,不需要添加 self 关键字, 因为编译器可以自动推断。
注意: 如果想知道 subtotal = total / (tipPct + 1) 计算来自:

代码如下:

(subtotal * taxPct) + subtotal = total
subtotal * (taxPct + 1) = total
subtotal = total / (taxPct + 1)

在先前代码块后添加代码(花括号内):

代码如下:

// 4
  func calcTipWithTipPct(tipPct: Double) -> Double {
    return subtotal * tipPct
  }

要定义一个方法, 可以使用 func 关键字. 然后列出参数(必须明确类型), 添加 -> 符号, 最后列出了返回类型。
这是一个函数,确定给小费的金额,这很简单,只要通过百分比乘以小计就可以得到结果。
在先前块之后添加代码(花括号内):

代码如下:

// 5
  func printPossibleTips() {
    println("15%: \(calcTipWithTipPct(0.15))")
    println("18%: \(calcTipWithTipPct(0.18))")
    println("20%: \(calcTipWithTipPct(0.20))")
  }

这是新的方法用于打印出三个可能的小费。
需要注意的是,当调用一个类的实例方法,第一个参数不需要命名(但其余要)。
另外,还要注意字符串插值是如何不限于打印输出变量。可以使用各种复杂的方法调用和操作,但需要正确的内联!
添加以下代码到playground(大括号之后)的底部:

代码如下:

// 6
let tipCalc = TipCalculator(total: 33.25, taxPct: 0.06)
tipCalc.printPossibleTips()

最后,创建小费计算器的实例,并调用方法打印可能小费。
这是到目前为止整个 playground 文件的全部代码:

代码如下:

// 1
class TipCalculator {
 
  // 2
  let total: Double
  let taxPct: Double
  let subtotal: Double
 
  // 3
  init(total: Double, taxPct: Double) {
    self.total = total
    self.taxPct = taxPct
    subtotal = total / (taxPct + 1)
  }
 
  // 4
  func calcTipWithTipPct(tipPct: Double) -> Double {
    return subtotal * tipPct
  }
 
  // 5
  func printPossibleTips() {
    println("15%: \(calcTipWithTipPct(0.15))")
    println("18%: \(calcTipWithTipPct(0.18))")
    println("20%: \(calcTipWithTipPct(0.20))")
  }
 
}
 
// 6
let tipCalc = TipCalculator(total: 33.25, taxPct: 0.06)
tipCalc.printPossibleTips()

查看助理编辑器的结果:

数组和For循环
目前,在上面的代码中有一些重复,因为调用 calcTipWithTotalmethod 几次来计算不同比例的小费。 这里可以通过使用一个数组来减少重复。
替换 printPossibleTips 如以下内容:

代码如下:

let possibleTipsInferred = [0.15, 0.18, 0.20]; // 小费比例数组列表
let possibleTipsExplicit:[Double] = [0.15, 0.18, 0.20]; // 小费比例数组列表

这说明创建double类型数组,既有推断,又有显式类型的例子(同时创建只是用于演示目的)。需要注意的是[Double]是Array<Double>的快捷方式。
然后下面添加这些行:

代码如下:

for possibleTip in possibleTipsInferred {
  println("\(possibleTip*100)%: \(calcTipWithTipPct(possibleTip))")
}

枚举遍历数组中的项与Objective-C相似,快速枚举- 请注意,不需要括号!
自己可编写类似这样的循环(但是目前这个语法是首选的风格):

代码如下:

for i in 0..< possibleTipsInferred.count {
  let possibleTip = possibleTipsInferred[i]
  println("\(possibleTip*100)%: \(calcTipWithTipPct(possibleTip))")
}

..< 运算符是一个非包函范围运算符,不包括上限值。还有一个运算符 ... 它具有包容性。
数组通过 count 属性来计算数组中的项目总数。也可以查找数组中特定项,通过语法 arrayName[index] 定义,如在这里看到。
字典
让我们做最后一次改变小费计算器。不是简单地打印出小费,可以将结果返回为字典。 这将使结果更容易显示在某种用于该应用的用户界面。
删除printPossibleTips方法,并将它替换为以下代码:

代码如下:

// 1
func returnPossibleTips() -> [Int: Double] {
 
  let possibleTipsInferred = [0.15, 0.18, 0.20]
  let possibleTipsExplicit:[Double] = [0.15, 0.18, 0.20]
 
  // 2
  var retval = [Int: Double]()
  for possibleTip in possibleTipsInferred {
    let intPct = Int(possibleTip*100)
    // 3
    retval[intPct] = calcTipWithTipPct(possibleTip)
  }
  return retval
 
}

这会得到一个错误在 playground 中,但很快就会解决了。
首先让我们通过以上部分的代码段:
在这里,标记方法返回字典,其中关键是int(尖端百分比为int,如15或20),并且该值是一个 Double(所计算的小费)。需要注意的是 [Int: Double]  只是 Dictionary<Int, Double> 的一个快捷方式。
这显示如何创建一个空的字典。请注意,因为正在此词典,需要声明它作为一个变量(使用var),而不是一个常量(使用let)。 否则,会得到一个编译错误。
这就是在字典中设置项目。 正如所看到的,它类似于Objective-C的字面量语法。
最后,修改 playground 文件的最后一行来调用这个方法(此修复错误):

代码如下:

tipCalc.returnPossibleTips()

当 playground 评估计算,应该能看到结果为字典(点击眼球的扩展视图,并使用下箭头展开)。

就是这样 - 恭喜,一个用Swift编写的全功能小费计算器已经完成!
下面是本教程所有最终 playground 文件的代码内容:

代码如下:

// 1
class TipCalculator {
// 2
  let total: Double
  let taxPct: Double
  let subtotal: Double
  // 3
  init(total: Double, taxPct: Double) {
    self.total = total
    self.taxPct = taxPct
    subtotal = total / (taxPct + 1)
  }

// 4
  func calcTipWithTipPct(tipPct: Double) -> Double {
    return subtotal * tipPct
  }
  // 1
  func returnPossibleTips() -> [Int: Double] {
     let possibleTipsInferred = [0.15, 0.18, 0.20]
     let possibleTipsExplicit:[Double] = [0.15, 0.18, 0.20]
    // 2
   var retval = [Int: Double]()
    for possibleTip in possibleTipsInferred {
      let intPct = Int(possibleTip*100)
      // 3
      retval[intPct] = calcTipWithTipPct(possibleTip)
    }
    return retval  
  }
}
// 6
let tipCalc = TipCalculator(total: 33.25, taxPct: 0.06)
tipCalc.returnPossibleTips()
}

(0)

相关推荐

  • 详解Swift编程中的常量和变量

    常量 常量指的是程序无法在其执行期间改变的固定值. 常量可以是任何像整型常量,浮点常量,字符常量或字符串的基本数据类型.也可以是枚举常量. 这些常量和常规变量处理一样,只是它们的值不能在定义后进行修改. 声明常量 使用常量时,则必须使用关键字 let 声明它们如下: 复制代码 代码如下: let constantName = <initial value> 下面是一个简单的例子来说明如何在 Swift 中声明一个常量: 复制代码 代码如下: import Cocoa let constA =

  • Swift的开发环境搭建以及基本语法详解

    Swift环境设置 在编写Swift程序之前,需要先设置好Swift开发环境.Swift提供了一个Playground平台用于学习目的,我们同样也需要设置.需要提供给 Xcode 软件的 Swift 编码在 Playground 中.如果熟悉Swift概念,那么可以使用Xcode IDE来做ISO/OS X应用程序的开发. 首先,需要在苹果开发者网站上的注册帐户(本教程假设你有开发者帐号). 如果已登录苹果网站,请访问以下链接: Download for Apple Developers 这将列

  • Swift内置的数字类型及基本的转换方法

    虽然编写任何编程语言,需要使用不同的变量来存储各种信息.变量不过是保留的内存位置来存储值.这意味着,当创建一个变量,在内存中会保留一些空间. 可能喜欢像存储字符串,字符,宽字符,整数,浮点数,布尔等各种数据类型的信息.根据一个变量的数据类型,操作系统分配内存,并决定什么可以存储保留在存储器. 内置数据类型 Swift 为程序员提供内置以及用户定义的种类数据类型. 以下是声明变量使用最频繁的基本数据类型的列表: Int 或 UInt - 这是用于整数.更具体地可以使用Int32,Int64来定义3

  • 零基础上手Swift快速入门教程概览

    Swift是苹果的品牌新的编程语言,在2014年WWDC(苹果开发者大会)上发布的编程语言. 随着Swift语言的发布,苹果也发布了一个出色的SWIFT的参考指南,这里强烈推荐. 但是这个学习指南又长又瘦!所以,如果没有很多的时间,只是想快速学习Swift,那么本教程就是为你准备的. 本 Swift 教程将需要大约25分钟学习,给出 Swift 语言一个快速浏览,包括变量,控制流,类等以及更多的最佳实践. 对于本Swift教程,需要Xcode最新版本(在写这篇Swift教程的时候使用的是Xcod

  • Swift hello world!Swift快速入门教程

    通常来说,编程语言教程中的第一个程序应该在屏幕上打印"Hello, world".在 Swift 中,可以用一行代码实现: 复制代码 代码如下: println("hello, world") 如果你写过 C 或者 Objective-C 代码,那你应该很熟悉这种形式--在 Swift 中,这行代码就是一个完整的程序.你不需要为了输入输出或者字符串处理导入一个单独的库.全局作用域中的代码会被自动当做程序的入口点,所以你也不需要main函数.你同样不需要在每个语句结尾

  • Vue.js快速入门教程

    像AngularJS这种前端框架可以让我们非常方便地开发出强大的单页应用,然而有时候Angular这种大型框架对于我们的项目来说过于庞大,很多功能不一定会用到.这时候我们就需要评估一下使用它的必要性了.如果我们仅仅需要在一个简单的网页里添加屈指可数的几个功能,那么用Angular就太麻烦了,必要的安装.配置.编写路由和设计控制器等等工作显得过于繁琐. 这时候我们需要一个更加轻量级的解决方案.Vue.js就是一个不错的选择.Vue.js是一个专注于视图模型(ViewModal)的框架.视图模型是U

  • Vue.js 60分钟快速入门教程

    vuejs是当下很火的一个JavaScript MVVM库,它是以数据驱动和组件化的思想构建的.相比于Angular.js,Vue.js提供了更加简洁.更易于理解的API,使得我们能够快速地上手并使用Vue.js. 如果你之前已经习惯了用jQuery操作DOM,学习Vue.js时请先抛开手动操作DOM的思维,因为Vue.js是数据驱动的,你无需手动操作DOM.它通过一些特殊的HTML语法,将DOM和数据绑定起来.一旦你创建了绑定,DOM将和数据保持同步,每当变更了数据,DOM也会相应地更新. 当

  • jQuery Easyui快速入门教程

    1.什么是JQuery EasyUI jQuery EasyUI是一组基于JQuery的UI插件集合,而JQueryEasyUI的目标就是帮助开发者更轻松的打造出功能丰富并且美观的UI界面.开发者不需要编写复杂的JavaScript,也不需要对css样式有深入的了解,开发者需要了解的只是一些简单的html标签. 2.学习jQuery EasyUI的条件 因为JQueryEasyUI是基于jQuery的UI库,所以,必须需要JQuery课程的基础. 3.JQuery EasyUI的特点 基于JQu

  • OpenStack云计算快速入门教程(1)之OpenStack及其构成简介

    该教程基于Ubuntu12.04版,它将帮助读者建立起一份OpenStack最小化安装.我是五岳之巅,翻译中多采用意译法,所以个别词与原版有出入,请大家谅解.我不是英语专业,我觉着搞技术最重要的就是理解,而不是四级和考研中那烦人的英译汉,所以我的目标是忠于原意.通俗表达,Over.英文原文在这里(http://docs.openstack.org/es@***/openstack-compute/starter/content/ ,请将ex@***中的@去掉,CU屏蔽的F词),下面步入正题: 第

  • Jupyter notebook快速入门教程(推荐)

    本文主要介绍了Jupyter notebook快速入门教程,分享给大家,具体如下: 本篇将给大家介绍一款超级好用的工具:Jupyter notebook. 为什么要介绍这款工具呢? 如果你想使用Python学习数据分析或数据挖掘,那么它应该是你第一个应该知道并会使用的工具,它很容易上手,用起来非常方便,是个对新手非常友好的工具.而事实也证明它的确很好用,在数据挖掘平台 Kaggle 上,使用 Python 的数据爱好者绝大多数使用 jupyter notebook 来实现分析和建模的过程,因此,

  • Python OpenCV快速入门教程

    OpenCV OpenCV是计算机视觉中最受欢迎的库,最初由intel使用C和C ++进行开发的,现在也可以在python中使用.该库是一个跨平台的开源库,是免费使用的.OpenCV库是一个高度优化的库,主要关注实时应用程序. OpenCV库是2500多种优化算法的组合,可用于检测和识别不同的人脸,实时识别图像中的对象,使用视频和网络摄像头对不同的人类动作进行分类,跟踪摄像机的运动,跟踪运动对象(例如汽车,人等),实时计数对象,缝合图像来产生高分辨率图像,从图像数据库中查找相似的图像,从使用闪光

  • Unity3D快速入门教程

    Unity3D游戏引擎介绍 Unity3D是由Unity Technologies开发的一个让玩家轻松创建诸如三维视频游戏.建筑可视化.实时三维动画等类型互动内容的多平台的综合型游戏开发工具,是一个全面整合的专业游戏引擎.使用Unity3D,开发者可以快速的开发出游戏.Unity3D引擎占据了游戏引擎市场45%的份额,居全球首位.因此,学习游戏开发,Unity3D的人才需求量最为庞大. Unity3D学习历程 俗话说,万事开头难.Unity3D的学习历程也是一样.学习Unity3D,大致分为以下

  • MyBatis-Plus简介和快速入门教程

    目录 一.MyBatis-Plus简介(来自官网) 二.快速开始 三.通用CRUD 3.1 insert(插入操作) 3.2 updateById(更新操作) 3.3 查询操作--各种select 3.4 删除操作--各种delete 附加1:如果表名或者表中属性的名称与我们实体类的名称不同解决方法 一.MyBatis-Plus简介(来自官网) MyBatis-Plus,简称MP,是一个MyBatis的增强工具,在MyBatis的基础上只做增强不做修改,为简化开发.提高效率而生. 特性: 无侵入

随机推荐