本章节将会学习创建一个简单的命令行app,用来存储用户的名字和年龄。期间我们会学习到swift的一些新内容,比如数组,对象,类。
Note:
这一节将会教你开发一个命令行的OS X app . 因此你需要再次确认你的Xcode版本是Xcode 6.1 及以上,否则无法进行。
Getting Started
打开xcode,点击
Get started with a playground
:
name 设置为Person,the platform 设置为iOS,点击Next.保存
输出自动创建的语句:
var str = "Hello,playground" |
Classes and Objects类和对象
类是用于创建对象的蓝图,它是一个定义包括在特定类型的对象中的方法和变量的软件模板。
接下来我们会创建一个名为Person
.的类,并创建与这个类相关的方法和属性来服务于你的程序。
首先在 playground:中加入声明类Person 的代码:
然后像创建变量一样,添加类的成员,比如姓,名子,年龄:
{
var firstName ""
var lastName var age = 0
除了上面定义的成员,还要添加成员函数,比如打印出用户的print方法。
首先,我们需要定义一个能够让用户输入信息的方法函数,将下面的代码拷贝复制到age成员的下面:
func input() -> String {
let keyboard = NSFileHandle.fileHandleWithStandardInput)
let inputData = keyboard.availableData
let rawString NSString(data: inputData,encoding:NSUTF8StringEncodingif let string = rawString {
return string.stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceAndNewlineCharacterSet))
} else return "Invalid input"
}
上面的方法是获取用户输入的信息.
Writing Your Own Method
下面我们将完成这个类的以下三个方法:
-
changeFirstName() 允许用户修改姓
-
enterInfo() 提示用户输入他们的信息内容
-
printInfo() 将信息打印到终端
changeFirstName() 方法是获取一个值,将其设置为Person 的姓。将下面代码放到input() 方法的下面:
func changeFirstName(newFirstName:String) {
接下来实现该函数的功能。前面我们已经在函数开头的()里面创建了一个string类型的变量newFirstName ,那我们需要做的就是将对象中姓的值设置为newFirstName :
你可以在该函数内实现任何你想实现的功能,上面只是一个简单的例子.
import UIKit
0
)
= keyboard.availableData
{
)
"Invalid input"
}
}
{
firstName = newFirstName
}
Using Your Class
在playground 文件的最后面创建一个类的对象newPerson ,如下 :
给这个新对象的属性赋值:
newPerson.firstName "Ry"
newPerson.lastName "Bristow"
newPerson.age 18 |
点击窗口右边的眼睛图标,会显示newPerson 对象中的属性值,如下图:
输入下面的代码,然后点击右边的眼睛图标,会发现之前firstName:存储的值已经变为"Paul":
newPerson.changeFirstName("Paul") |
More Methods
接下来将实现enterInfo() .跟之前一样,先创建方法的头。在changeFirstName()方法的下面输入下面代码::
func enterInfo 下面完成enterInfo()函数的主体内容。首先,利用println() 语句告诉用户你想让用户做什么
println"What is the first name?" 然后紧接着输入下面的语句,将用户从键盘输入的内容赋给对象的成员firstName.
firstName = input 后面还会为该函数添加其他内容. 现在我们先创建printInfo()方法 :
func printInfo"First Name: \(firstName)")
目前为止,你已经完成了一个类的例子。建议尽可能的像上面一样在Playground中去编写代码,因为在制作一个完整的app之前,上面的方法非常适合熟悉swift的一些新语法。
Creating a Class with a Swift File
打开Xcode ,点击
Create a new Xcode project
. 如果你已经打开了一个工程项目,那就选择
File
目录里面的
New > Project
.创建一个新工程。在 OS X 选项中选择
Application
和
Command Line Tool
,然后点击
Next
.
然后进入
File\New\File
并选择
OS X\Source\Swift File
,点击
Next
.
命名为Person.swift,点击Create.
将下面的代码拷贝到Person.swift:文件中
import Foundation
)
firstName 在转换到main.swift文件之前,应该将类的内容完善。在中添加名字和年龄的输入函数和提示信息。 :
)
firstName "What is \(firstName)'s last name?")
lastName "How old is \(firstName) \(lastName)"let userInput ).toIntlet number = userInput {
age = number
不要只是复制粘贴给出的代码,尽量自己一步步的去完成代码编写,如此才是学习。上面关于age的部分相对复杂一点,因为用户输入的age是字符串形式,我们需要通过toInt() 方法转换成整型。.
printInfo()方法中按下面的格式输出:
John Smith is 30 years old |
Solution Inside: Solution |
Hide |
"\(lastName) is \(age) years old"} |
|
全部代码如下
|
)
lastName {
age = number
Testing Your Class
打开main.swift文件输入下面的内容:
)
newPerson.enterInfo)
newPerson.printInfo 创建了类Person的一个新实例newPerson,类都使用构造器语法来生成新的实例。构造器语法的最简单形式是在结构体或者类的类型名称后跟随一对空括号,通过这种方式所创建的类或者结构体实例,其属性均会被初始化为默认值。
运行程序
What is the first name?
Ry
What is Ry's last name?
Bristow
How old is Ry Bristow
18
Ry Bristow is 18 years old
Program ended with exit code: 0
The Do While Loop
接下来,我们利用do...while 循环实现用户能输入多个人的信息。首先,需要下载文件helpers.swift,并加入到xcode中。前面章节已经结束了加入的方法。
do...while不同于while ,因为在进行判断执行的条件之前就会先执行一次。
首先在import 语句下面创建string类型的变量response:
do...while循环以下面的代码开始:
do } while(response == "y" 将之前import下面的语句剪切后粘贴到循环里面。
另外,需要给用户提供选择是否继续进行循环操作。
"Do you want to enter another name? (y/n)")
response 用户输入y将会继续操作,输入n会退出循环。(然而,只要输入y以外的任何字符都会退出循环)
完整代码如下.
|
import Foundation
String
do )
newPerson.enterInfo)
newPerson.printInfo)
)
response )
) |
|
运行并测试 代码
What is the first name?
Ry
What is Ry's last name?
Bristow
How old is Ry Bristow
18
Ry Bristow is 18 years old
Do you want to enter another name? (y/n)
y
What is the first name?
Ray
What is Ray's last name?
Wenderlich
How old is Ray Wenderlich
34
Ray Wenderlich is 34 years old
Do you want to enter another name? (y/n)
n
Program ended with exit code: 0
Arrays数组
前面的代码中,程序每运行一次循环,上次得到的信息就会丢失。运用数组可以防止这样的情况,将每次循环操作得到的信息都保存起来,并允许对其进行访问。在
语句下面声明一个数组:
创建一个名为people :的数组存储. 类型的对象。对声明的变量进行类型说明时,将类名字用[]括起来就表明你声明的是一个数组。赋值为[ ],表示该数组是空的,不包含任何内容。
var people: [Person] = [] |
To add an object to the array,you use the method采用append() . 方法向数组中添加一个对象,将下面的代码插入到enterInfo() 和 printInfo() 之间.
people.append(newPerson 每创建一个newPerson 对象 并为其输入相关信息后,都会通过append()方法保存到数组中。 在循环的最外面我们可以通过println() 打印出总共输入的人员信息个数.
"Number of people in the database: \(people.count)" 运行app,并输入两个人员的信息,会看到如下打印:
Number of people in the database: 2 |
For Loops
下面我们学习使用for 循环将整个数据库中的人员信息都打印出来,for-in 循环能更简单地遍历数组(array).
在文件main.swift:的最后面加上如下代码
for onePerson in people 循环来遍历数组people里面的所有元素 . 每轮循环执行完后,onePerson 的值就会变为数组中下一个对象,直到循环结束。将下面的语句加到for循环体中,每执行一次循环就会打印出数组中对象的内容 :
onePerson.printInfo :的完整代码如下.
Hide |
String
]
)
people.append)
{
onePerson.printInfo
运行app后,结果如下: 原文链接:https://www.f2er.com/swift/326092.html
| | | | | | | | | | | | | | | | | | | |