转载

使用 IBM Swift Sandbox 介绍 Swift 教程

关于本教程

本教程将提供一些洞察,帮助对另一种语言有基本了解的开发人员熟悉 Swift。

Swift 是一种强大的表达性语言,最初针对 iOS 移动应用程序,后来衍生出了新的用途。您可以在此处阅读我的同事 Andrew Trice 写的文章,了解 Swift 的一些核心优势。

本教程还支持 Hour of Code 活动,该活动面向学生,用一小时时间介绍计算机科学基础知识。我们将在这里为 Swift 初学者撰写 #Hour Of Code 介绍性文章 。您将了解 Swift 概念,并通过在云中编写代码,使用IBM Swift Sandbox提高自己的学习水平。

我们将使用一个棒球方面的示例来说明这些概念。但是,如果您不是忠实粉丝,不必担心!要开始使用,请访问IBM Swift Sandbox。Sandbox 提供了在云中编写 Swift 代码的一种快速简便的方法。在 Source Code 面板中编写代码,单击 Run,您会立刻在 Output 面板看到您的结果!

有多个示例可供选择。首先,选择 hour_of_code.swift 示例。此示例为我们的练习提供了一个起点。还有一个 hour_of_code_solution.swift 文件提供了我们练习的答案;现在,尽力忍住不要偷看答案!

图 1. 示例

使用 IBM Swift Sandbox 介绍 Swift 教程

图 1. 示例

使用 IBM Swift Sandbox 介绍 Swift 教程

Player 类

我们要查看的第一个对象是 Player 类。向下滚动示例代码,找到 Player 的定义。

变量

首先,我们会专注于 Player 类和变量。我们将在后面讨论协议。如果只设置某个值一次,请使用 Let,而 var 则用于可能会变化(可变)的变量。另外,请注意,Swift 有类型推断,这意味着编译器可以从上下文推断变量类型,不需要明确定义它。您可以在下面的示例中看到 hits、atBats 和 walks 的定义。

最后,您会看到 nickName 属性后面有一个 ? 符号,这意味着它是一个可选变量,不必只有一个值。在本教程中,我们不会详细介绍可选变量。关于这一主题,只简单说一点,如果您有百分百的信心确定已经设置了该值,那么您可以使用 ! 运算符来检索可选变量的值,否则会产生一个运行时异常。例如,如果要输出 nickName,可以使用 print(nickName!)

// Player class that conforms to Hittable protocol   public class Player:Hittable {   //Immutable variables are defined with let.   //They don't have to be initialized when defined.   let name:String   //An optional can hold a value or be nil   let nickName:String?   //Mutable variables are defined with var.   var hits = 0   var atBats = 0

初始化程序

现在让我们来看看初始化程序。在这里,需要注意的是,Player 对象的初始化有两个参数,一个 name 和一个 String。Name 是必需的,nickName 是可选的,因此可以为其分配一个 nil 值。我们还通过添加 = nil 为 nickName 参数提供一个默认值,这样,在没有 nickName 的情况下,可以更简单地初始化 Player。另外,请注意 self 的用法;我们将设置 name 的类变量,使用 self.name 作为参数名。

//An initializer is defined with init.The nickName parameter   //has a default value of nil if it is not passed in to the function.   public init(name:String, nickName:String?= nil) {   //Self is used to distinguish between the class property and   //the property passed into the initializer   self.name = name   self.nickName = nickName   }

计算属性

接下来,让我们来看一下计算属性。计算属性类似于某个变量被访问时自动执行的函数。我们已经定义了 battingAverage 属性,它计算每次打数(尝试击球)的安打率。由于 hits 和 atBats 被存储为整数,所以它们的计算结果使用了双精度,以便让结果更精确。另请注意,我们还使用了三元运算符,它遵循 x ? y : z 的格式,其中,x 是一个表达式,如果表达式为 true,则执行 y,如果表达式为 false,则执行 z。在本例中,如果球员还没有打数,我们使用这个运算符来避免被除数为 0 的错误。

//A computed property calculates rather than stores a value   public var battingAverage:Double {   return atBats > 0 ?Double(hits) / Double(atBats) :0   }   public var rating:String {   if battingAverage > 0.3 {   return Rating.AllStar.rawValue   }   return Rating.BenchWarmer.rawValue   }

函数

函数让类的用户可以在对象上执行功能。在本例中,我们已经定义了两个函数:hit() 和 out()。hit 函数增加了 hits 和 atBats 变量,而 out 函数只增加了 atBats 变量。每个函数都有一个 public 访问等级,这意味着可以从任何模块调用函数。还有 internal 和 private 访问等级,我们不打算在这里深入介绍。这些函数都不会返回值(在某些语言中,会返回 void)。如果某个函数返回了一个值,它的声明会附加一个 ->,也就是说,public func hit() -> Bool 表明,hit() 返回了一个 true 或 false 值。

public func hit() {   hits++   atBats++   }   public func out() {   atBats++   }

使用类

接下来,我们将演示如何创建和使用类。请查看下面的代码,它实例化一个球员,然后在其上调用了若干个函数。球员有一个安打后,他们的评分就会增加。

//Instantiate a player named Swifty   let p = Player(name:"Swifty")   //Call the out function on the player   p.out()   print(p.rating)   p.out()   p.hit()   //The player's rating has improved!   print(p.rating)

练习

  1. 更新初始化程序,使其包含一个昵称,并打印出该昵称。
  2. 在棒球比赛中,保送 (walks) 是指当球员接到 4 个坏球,或 4 个球被投出好球区以外的地方时,球员上一垒,并且不计算为一次打数。为保送添加一个变量,并创建一个 walk() 函数,增加保送次数,而不是打数。
  3. 创建一个 onBasePercentage() 函数,类似于 battingAverage() 函数。它使用以下公式(在本例中稍微简化):安打次数 + 保送次数 / 打数。

协议

协议是类必须遵循的方法和属性的准则。协议中定义了一些要求,协议可以帮助类遵循一致的模式来实现这些要求。在我们的示例中,我们定义了 2 个函数:hit() 和 out(),还定义了 battingAverage 属性,必须在采用 Hittable 协议的任何类中定义它们。现在,请注意 Player 类的定义如何引用 Hittable 协议。

//Define variables and functions that classes must conform to   public protocol Hittable {   func hit()   func out()   //A variable of type Double with only a getter   var battingAverage:Double { get }   }

练习

  1. 将 walk 和 onBasePercentage 添加到 Hittable 协议。
  2. 在 Swift 中定义的其中一个标准协议是 CustomStringConvertible。通过在类中实现 description 属性,可以提供对象的文本表示,这对打印很有帮助的。更新 Player 类来实现 CustomStringConvertible,并创建一个 description 计算属性,它将返回一个字符串,其中包含球员的姓名和评分。然后,打印出对象。

枚举

枚举允许您定义一组相关的值。在本例中,我们将 Rating 定义为有 2 个值的枚举参数,AllStar 和 BenchWarmer。球员需要 .300 或更高的安打率才会被视为 AllStar。我们还提供了原始值,以便采用更加适合人类阅读的方式来打印枚举值。

//An enum lists defines discrete values.A raw value can also be provided   //for each value, in this case a String.   public enum Rating:String {   case AllStar = "All Star"  case BenchWarmer = "Bench Warmer"  }

练习

  1. 将一个新的值 MVP 添加到枚举。然后,用以下逻辑更新在 Player 类中的 rating 属性。
    • 如果球员的上垒率 (OBP) >= .400 且打击率 (BA) >= .300,他们就是 MVP
    • OBP < .400 且 BA >= .300,All Star
    • BA < .300,Bench Warmer

结束语

在本 Swift 教程中,您使用了一些通用的语言概念,比如类、协议、函数和枚举。您还学习了一些更高级的概念,比如,计算属性和可选属性。IBM Swift Sandbox 可以让您轻松地了解 Swift 并在云中测试代码。我们希望您喜欢本教程,并再次回到这里,从IBM Swift 工程了解有关的更多信息。

原文请访问 IBM developerWorks / Developer CentersSwift@IBM。

Swift 和 Swift 标志属于 Apple Inc。

原文  http://www.ibm.com/developerworks/cn/mobile/zones/introduction-to-swift-tutorial-using-the-ibm-swift-sandbox/index.html?ca=drs-
正文到此结束
Loading...