本章节将会学习创建一个简单的命令行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
.
输入工程名称等信息之后,点击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" }
全部代码如下
Solution Inside
Hide
)
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以外的任何字符都会退出循环)
完整代码如下.
Hide
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后,结果如下:
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。
相关推荐
效率成吨提升之代码生成器-蓝湖工具神器iOS,Android,Swift,Flutter
软件简介:蓝湖辅助工具,减少移动端开发中控件属性的复制和粘贴.待开发的功能:1.支持自动生成约束2.开发设置页面3.做一个浏览器插件,支持不需要下载整个工程,可即时操作当前蓝湖浏览页面4.支持Flutter语言模板生成5.支持更多平台,如Sketch等6.支持用户自定义语言模板
【Audio音频开发】音频基础知识及PCM技术详解
现实生活中,我们听到的声音都是时间连续的,我们称为这种信号叫模拟信号。模拟信号需要进行数字化以后才能在计算机中使用。目前我们在计算机上进行音频播放都需要依赖于音频文件。那么音频文件如何生成的呢?音频文件的生成过程是将声音信息采样、量化和编码产生的数字信号的过程,我们人耳所能听到的声音频率范围为(20Hz~20KHz),因此音频文件格式的最大带宽是20KHZ。根据奈奎斯特的理论,音频文件的采样率一般在40~50KHZ之间。奈奎斯特采样定律,又称香农采样定律。...............
见过仙女蹦迪吗?一起用python做个小仙女代码蹦迪视频
前言最近在B站上看到一个漂亮的仙女姐姐跳舞视频,循环看了亿遍又亿遍,久久不能离开!看着小仙紫姐姐的蹦迪视频,除了一键三连还能做什么?突发奇想,能不能把舞蹈视频转成代码舞呢?说干就干,今天就手把手教大家如何把跳舞视频转成代码舞,跟着仙女姐姐一起蹦起来~视频来源:【紫颜】见过仙女蹦迪吗 【千盏】一、核心功能设计总体来说,我们需要分为以下几步完成:从B站上把小姐姐的视频下载下来对视频进行截取GIF,把截取的GIF通过ASCII Animator进行ASCII字符转换把转换的字符gif根据每
自定义ava数据集及训练与测试 完整版 时空动作/行为 视频数据集制作 yolov5, deep sort, VIA MMAction, SlowFast
前言这一篇博客应该是我花时间最多的一次了,从2022年1月底至2022年4月底。我已经将这篇博客的内容写为论文,上传至arxiv:https://arxiv.org/pdf/2204.10160.pdf欢迎大家指出我论文中的问题,特别是语法与用词问题在github上,我也上传了完整的项目:https://github.com/Whiffe/Custom-ava-dataset_Custom-Spatio-Temporally-Action-Video-Dataset关于自定义ava数据集,也是后台
【视频+源码】登录鉴权的三种方式:token、jwt、session实战分享
因为我既对接过session、cookie,也对接过JWT,今年因为工作需要也对接了gtoken的2个版本,对这方面的理解还算深入。尤其是看到官方文档评论区又小伙伴表示看不懂,所以做了这期视频内容出来:视频在这里:本期内容对应B站的开源视频因为涉及的知识点比较多,视频内容比较长。如果你觉得看视频浪费时间,可以直接阅读源码:goframe v2版本集成gtokengoframe v1版本集成gtokengoframe v2版本集成jwtgoframe v2版本session登录官方调用示例文档jwt和sess
【Android App】实战项目之仿微信的私信和群聊App附源码和演示视频 超详细必看
【Android App】实战项目之仿微信的私信和群聊App(附源码和演示视频 超详细必看)
采用MATLAB对正弦信号,语音信号进行生成、采样和恢复,利用MATLAB工具箱对混杂噪声的音频信号进行滤波
采用MATLAB对正弦信号,语音信号进行生成、采样和内插恢复,利用MATLAB工具箱对混杂噪声的音频信号进行滤波
Keras深度学习实战40——音频生成
随着移动互联网、云端存储等技术的快速发展,包含丰富信息的音频数据呈现几何级速率增长。这些海量数据在为人工分析带来困难的同时,也为音频认知、创新学习研究提供了数据基础。在本节中,我们通过构建生成模型来生成音频序列文件,从而进一步加深对序列数据处理问题的了解。
最新文章
• 效率成吨提升之代码生成器-蓝湖工具神器…
• 【Audio音频开发】音频基础知识及PCM技…
• 见过仙女蹦迪吗?一起用python做个小仙…
• 【Android App】实战项目之仿抖音的短视…
• 自定义ava数据集及训练与测试 完整版 时…
• 【视频+源码】登录鉴权的三种方式:tok…
• 【Android App】实战项目之仿微信的私信…
• 零基础用Android Studio实现简单的本地…
• 采用MATLAB对正弦信号,语音信号进行生…
• Keras深度学习实战40——音频生成
• 视频实时行为检测——基于yolov5+deeps…
• 数电实验 数字电子钟设计 基于quartus …
• 腾讯会议使用OBS虚拟摄像头
• 文本生成视频Make-A-Video,根据一句话…
• 信号处理——MATLAB音频信号加噪、滤波
• 【新知实验室 - TRTC 实践】音视频互动…
• Keras深度学习实战39——音乐音频分类
• C++游戏game | 井字棋游戏坤坤版配资源…