您的位置:首页 > 移动开发 > Swift

swift tutorial 2---你的第一个项目

2015-08-28 16:37 831 查看
更新于4/13/15:下面文章是基于 Xcode6.3 / Swift 1.2。这一部分将通过一个简单的数字猜谜游戏继续学习swift的新知识。同时我们会用到在前一章节中所学到的swift知识,如果你忘记了怎么用,就去前一章翻看。好了,开始猜谜!Note: 这一节将会教你开发一个命令行的 OS X app . 因此你需要再次确认你的Xcode版本是Xcode 6.1 及以上,否则无法进行。

Writing a Prototype开始写一个模板

我们将会创建一个运行经典游戏“猜大小”的应用。计算机会随机产生一个数字让你去猜。在固定的猜测次数内,每猜一次,计算机都会告诉你猜的值是偏大还是偏小,直到猜对为止或是已经达到猜测次数为止。首先,在真正创建命令行工具的应用之前,我们要在playground中完成你的app模板。现在打开Xcode ,点击Get started with a playground:创建一个playground文件。输入文件名和平台名,点击next,保存。删除自动创建的注释和
String
,的声明,只保留下面的代码 。
import UIKit
然后输入下面的代码:
func randomIntBetween(low:Int, high:Int) -> Int {
let range = high - (low - 1)
return (Int(arc4random()) % range) + (low - 1)
}
暂时无须关注上面每条语句的意思,只要知道上面的代码能够在一个最大数和最小数之间随机产生一个数字. 后面你会编写自己的方法函数,但是现在你只需要调用arc4random()这个库函数,如同之前调用
toInt()
方法一样。

Let’s Make a Game!我们来做个游戏

游戏开始!首先你要告诉程序,给出一个随机数字作为猜谜游戏的正确答案。这时就需要用到前面提供给我们方法。在前面输入的代码下面输入下面的代码.
let answer = randomIntBetween(1, 100)
你要做的就是声明一个Int型的常量并初始化为1到100之间的一个随机整数。如此,答案每次都会不同,除非你人工修改代码。缺点是会造成游戏非常的死板。另外,你需要调用
println()
做一些说明来告诉用户接下来该做什么. :
println("Enter a number between 1 and 100.")
不幸的是,playgrounds 不允许用户进行输入. 不用担心,后面你可以将前面的移到命令行工具的应用中。 现在我们只需要创建一个整型变量来保存我们猜测的值,如下:
var guess = 7
接下来你还必须构造一些条件来告诉用户他猜测的值是偏大还是偏小或者猜对了。这时就需要用到前面章节中学到的知识了。
if(guess > answer) {
println("Lower!")
}
else if(guess < answer) {
println("Higher!")
}
else {
println("Correct! The answer was \(answer).")
}

Creating a Command Line Tool Application创建一个命令行工具的应用

Playgrounds 对于学习代码的语法非常有用,但是它不能接收用户的输入也不能制作app.因此,你得在Xcode中创建另一种工程项目来完成命令行工具的应用。打开Xcode ,点击 Create a new Xcode project. 如果你已经打开了一个工程项目,那就选择File 目录里面的 New > Project.创建一个新工程。在 OS X 选项中选择 ApplicationCommand Line Tool ,然后点击 Next.Product Name: My First Project(项目名字)Organization Name: 团体名称,可选Organization Identifier: 输入 com.yourname, 例如com.rybristowLanguage: 语言,Swift点击next,选择保存工程文件的路径,然后点击create。

Running Your App运行自己的app

Xcode 也会默认生成一些代码. 点击屏幕左上方的三角形的类似于“开始”的 Run button按钮 。屏幕的下发会弹出一个盒子窗口,窗口的右边会打印出[code]Hello, World!
.如果你的屏幕比较窄,可能看不到整个盒子窗口,只能显示下面的一半窗口。点击窗口的最右下方靠右的按钮,就会看到有打印结果的另一半窗口了。在写你的第一个app之前,先了解下Xcode的特性。

Xcode

The left pane of Xcode 的左边显示工程的文件目录。这些文件是你所使用的工程模板自动创建的。点击并打开 My First Project Folder 文件夹中的main.swift打开的文件内容
println("Hello, World!")
跟上一章节中接触到非常像,不同的是,swift文件不会像playground 文件一样在屏幕的右边实时显示出代码运行的结果。swift文件才能真正用来创建apps。使用Objective-C 创建app,基础文件要比这多些。而且会声明一个
main
函数来开启app。swift不再需要这个函数,但是工程需要建立名为main.swift的文件,所以千万不要对这个文件重命名。

From Prototype to Project从模板到工程

首先删除
println()
语句,只留下最上面的注释和语句
import Foundation
.然后把之前在playground 文件中完成的代码复制粘贴到main.swift 文件中的
import Foundation 语句下面。
let answer = randomIntBetween(0, 100)println("Enter a number between 1 and 100.")var guess = 7if(guess > answer) { println("Lower!") } else if(guess < answer) { println("Higher!") } else { println("Correct! The answer was \(answer).")}[/code]
这时你会发现代码报错.不用担心,这是因为计算机无法识别你的函数
randomIntBetween()
. 为了解决这个问题,你需要下载helper 文件 并拖到你的My First Project 工程中。在出现的对话框中选上下图中的选项,一定要确保勾上copy the items 将所加的项目拷贝到工程中.这样即使原始文件的位置发生了变化,工程也仍然包含它。保存工程,之前的错误提示就是消失。

Allowing for User Input允许用户输入

如果每次要进行猜谜的时候都需要手动去改代码中变量的值,然后再重新运行app,那这个游戏就非常僵硬。下面就实现允许用户输入的功能,我们马上就可以用到 helpers.swift 。将下面这行代码
var guess = 7
替换为
let userInput = input()
这时你就创建了一个常量
userInput
来存储用户从键盘上输入的字符串
String
. 因为字符串无法跟int整型进行比较,所以还需要将字符串转换为整型。
let inputAsInt = userInput.toInt()if let guess = inputAsInt  {}  else  {}
import Foundationlet answer = randomIntBetween(1, 100)println("Enter a number between 1 and 100.")let userInput = input()let inputAsInt = userInput.toInt()if let guess = inputAsInt {if(guess > answer) {
println("Lower!")
}
else if(guess < answer) {
println("Higher!")
}
else {
println("Correct! The answer was \(answer).")}}  else  {}
当用户输入有误时,给出下面的提示信息:
println("Invalid input! Please enter a number.")
点击运行按钮但是目前只能猜测一次,那就很难赢得游戏。

Implementing Rounds实现循环猜测

现在我们需要利用
while
循环来保证程序能一直让用户猜谜直到猜到正确的答案。
while(true)  {}
import Foundationlet answer = randomIntBetween(0, 100)while(true)  {println("Enter a number between 1 and 100.")let userInput = input()let inputAsInt = userInput.toInt()if let guess = inputAsInt  {if(guess > answer) {
println("Lower!")
}
else if(guess < answer) {
println("Higher!")
}
else {
println("Correct! The answer was \(answer).")}} else  {println("Invalid input! Please enter a number.")}}
但是现在如果运行你的app,程序就无法停止,除非点击run按钮旁边的stop按钮。因为上面的循环控制块中没有实现退出循环的方法,我们需要用到上一章节中学习到的break语句来退出循环。如下,程序将在用户输入正确的答案后退出循环。
else {println("Correct! The answer was \(answer).")break}
另外,建议你可以定义一个变量turn来告诉用户,他是第几次猜测答案。初始值设置为1.
var turn = 1
println()
语句中打印出用户猜测的次数:
println("Guess #\(turn): Enter a number between 1 and 100.")
如果没有猜对,那turn就加1.
turn = turn + 1
输入的答案如果不是数字,那就用
continue
语句退出当前这轮循环,进入下一轮循环,猜测的次数不用加1.
else  {println("Invalid input! Please enter a number.")continue}
最后代码如下:
import Foundationlet answer = randomIntBetween(0, 100)var turn = 1while(true)  {println("Guess #\(turn): Enter a number between 1 and 100.")let userInput = input()let inputAsInt = userInput.toInt()if let guess = inputAsInt  {if(guess > answer) {
println("Lower!")
}
else if(guess < answer) {
println("Higher!")
}
else {
println("Correct! The answer was \(answer).")break}} else  {println("Invalid input! Please enter a number.")continue}turn = turn + 1}println("It took you \(turn) tries.")
测试结果如下:
Guess #1: Enter a number between 1 and 100.10Higher!Guess #2: Enter a number between 1 and 100.50Higher!Guess #3: Enter a number between 1 and 100.80Lower!Guess #4: Enter a number between 1 and 100.60Higher!Guess #5: Enter a number between 1 and 100.70Higher!Guess #6: Enter a number between 1 and 100.75Lower!Guess #7: Enter a number between 1 and 100.73Correct! The answer was 73.It took you 7 tries.Program ended with exit code: 0
http://www.raywenderlich.com/75919/learn-to-code-ios-apps-with-swift-tutorial-2

                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: