本章节将会学习创建一个简单的命令行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 的代码:

class 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

下面我们将完成这个类的以下三个方法:

  1. changeFirstName()允许用户修改姓
  2. enterInfo()提示用户输入他们的信息内容
  3. printInfo()将信息打印到终端

changeFirstName()方法是获取一个值,将其设置为Person的姓。将下面代码放到input()方法的下面:

func changeFirstName(newFirstName:String)  {
 接下来实现该函数的功能。前面我们已经在函数开头的()里面创建了一个string类型的变量newFirstName,那我们需要做的就是将对象中姓的值设置为newFirstName: 
firstName = newFirstName

你可以在该函数内实现任何你想实现的功能,上面只是一个简单的例子.

import UIKit

0

  )
    = keyboard.availableData
    {
      )
    "Invalid input"
    }
  }

  {
    firstName = newFirstName
  }

 Using Your Class 
 

在playground 文件的最后面创建一个类的对象newPerson,如下

:
var newPerson = Person)

给这个新对象的属性赋值:

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:

var response: String

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数组

前面的代码中,程序每运行一次循环,上次得到的信息就会丢失。运用数组可以防止这样的情况,将每次循环操作得到的信息都保存起来,并允许对其进行访问。在

String
语句下面声明一个数组:
 创建一个名为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 | 井字棋游戏坤坤版配资源…

Swift Tutorial(swift 教程) 3:Arrays, Objects, and Classes数组,对象和类的更多相关文章

  1. html5使用canvas实现弹幕功能示例

    这篇文章主要介绍了html5使用canvas实现弹幕功能示例的相关资料,需要的朋友可以参考下

  2. 前端实现弹幕效果的方法总结(包含css3和canvas的实现方式)

    这篇文章主要介绍了前端实现弹幕效果的方法总结(包含css3和canvas的实现方式)的相关资料,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

  3. H5 canvas实现贪吃蛇小游戏

    本篇文章主要介绍了H5 canvas实现贪吃蛇小游戏,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

  4. ios – parse.com用于键,预期字符串的无效类型,但是得到了数组

    我尝试将我的数据保存到parse.com.我已经预先在parse.com上创建了一个名为’SomeClass’的类.它有一个名为’mySpecialColumn’的列,其数据类型为String.这是我尝试使用以下代码保存数据的代码:如果我运行这个我得到:错误:密钥mySpecialColumn的无效类型,预期字符串,但得到数组这就是我在parse.com上的核心外观:有谁知道我为什么会收到这个错误?

  5. ios – Swift相当于`[NSDictionary initWithObjects:forKeys:]`

    Swift的原生字典是否与[NSDictionaryinitWithObjects:forKeys:]相当?假设我有两个带键和值的数组,并希望将它们放在字典中.在Objective-C中,我这样做:当然我可以通过两个数组迭代一个计数器,使用vardict:[String:Int]并逐步添加东西.但这似乎不是一个好的解决方案.使用zip和enumerate可能是同时迭代两者的更好方法.然而,这种方法

  6. ios – NSArray indexOfObject返回nil

    任何想法为什么我不能得到一个我确定在数组中存在的对象的索引?相反,我没有……

  7. ios – 上下文类型’NSFastEnumeration’不能与数组文字一起使用

    斯威夫特3,你会这样做吗?解决方法正如您所发现的,您不能使用as-casting将数组文字的类型指定为NSFastEnumeration.您需要找到一个符合NSFastEnumeration的正确类,在您的情况下它是NSArray.通常写这样的东西:

  8. ios – 无法识别的选择器发送到实例NSTimer Swift

    解决方法让updateTime成为一个类方法.如果它是在一个纯粹的Swift类中,你需要在@objc前面说明该方法的声明,如:

  9. ios – 在Swift中获取Cocoa Touch Framework项目版本字符串

    有谁知道这是否是我的项目设置中的缺陷,Xcode中的一个错误,或者是否有一种方法可以将Swift中的框架版本作为String或数组获取,这样我可以提供比major.minor更精细的版本控制?

  10. ios – 搜索数组swift中的对象

    我正在尝试使用UISearchController创建搜索功能.但是,我似乎无法使其与我的团队对象一起工作.我首先创建了一个包含id,name和shortname的TeamObject.然后我从一个url中检索teamData,并将TeamObjects添加到一个填充到tableView中的数组中.这个tableView包含一个searchController,它假设过滤数据,但没有任何反应.阵列

随机推荐

  1. Swift UITextField,UITextView,UISegmentedControl,UISwitch

    下面我们通过一个demo来简单的实现下这些控件的功能.首先,我们拖将这几个控件拖到storyboard,并关联上相应的属性和动作.如图:关联上属性和动作后,看看实现的代码:

  2. swift UISlider,UIStepper

    我们用两个label来显示slider和stepper的值.再用张图片来显示改变stepper值的效果.首先,这三个控件需要全局变量声明如下然后,我们对所有的控件做个简单的布局:最后,当slider的值改变时,我们用一个label来显示值的变化,同样,用另一个label来显示stepper值的变化,并改变图片的大小:实现效果如下:

  3. preferredFontForTextStyle字体设置之更改

    即:

  4. Swift没有异常处理,遇到功能性错误怎么办?

    本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请发送邮件至dio@foxmail.com举报,一经查实,本站将立刻删除。

  5. 字典实战和UIKit初探

    ios中数组和字典的应用Applicationschedule类别子项类别名称优先级数据包contactsentertainment接触UIKit学习用Swift调用CocoaTouchimportUIKitletcolors=[]varbackView=UIView(frame:CGRectMake(0.0,0.0,320.0,CGFloat(colors.count*50)))backView

  6. swift语言IOS8开发战记21 Core Data2

    上一话中我们简单地介绍了一些coredata的基本知识,这一话我们通过编程来实现coredata的使用。还记得我们在coredata中定义的那个Model么,上面这段代码会加载这个Model。定义完方法之后,我们对coredata的准备都已经完成了。最后强调一点,coredata并不是数据库,它只是一个框架,协助我们进行数据库操作,它并不关心我们把数据存到哪里。

  7. swift语言IOS8开发战记22 Core Data3

    上一话我们定义了与coredata有关的变量和方法,做足了准备工作,这一话我们来试试能不能成功。首先打开上一话中生成的Info类,在其中引用头文件的地方添加一个@objc,不然后面会报错,我也不知道为什么。

  8. swift实战小程序1天气预报

    在有一定swift基础的情况下,让我们来做一些小程序练练手,今天来试试做一个简单地天气预报。然后在btnpressed方法中依旧增加loadWeather方法.在loadWeather方法中加上信息的显示语句:运行一下看看效果,如图:虽然显示出来了,但是我们的text是可编辑状态的,在storyboard中勾选Editable,再次运行:大功告成,而且现在每次单击按钮,就会重新请求天气情况,大家也来试试吧。

  9. 【iOS学习01】swift ? and !  的学习

    如果不初始化就会报错。

  10. swift语言IOS8开发战记23 Core Data4

    接着我们需要把我们的Rest类变成一个被coredata管理的类,点开Rest类,作如下修改:关键字@NSManaged的作用是与实体中对应的属性通信,BinaryData对应的类型是NSData,CoreData没有布尔属性,只能用0和1来区分。进行如下操作,输入类名:建立好之后因为我们之前写的代码有些地方并不适用于coredata,所以编译器会报错,现在来一一解决。

返回
顶部