Swift是Apple于2014年WWDC(苹果开发者大会)发布的全新开发语言,可与Objective-C共同运行于mac OS和iOS平台,用于搭建基于Apple平台的应用程序。

本章主要为您介绍了Swift 3.0的常量、变量、数据类型、运算符、循环语句、条件语句等一些基础的语法知识。


3.1Swift的基本概念

Swift是一种强劲而直观的编程语言,它由Apple创造,可用来为iOS、Mac、Apple TV 和 Apple Watch等设备和平台开发应用程序。Swift语言旨在为开发者提供充分的自由,所以它易用并且开源,只要有想法,谁都可以使用Swift创造非凡的作品。

Swift 将现代编程语言思想的精华,和苹果工程师文化的智慧结合了起来。编译器对性能进行了优化,编程语言对开发进行了优化,两者互不干扰,鱼与熊掌兼得。所以Swift具有快速而且高效的特点,它还是第一套和脚本语言具有同样表现力和趣味性的系统编程语言。

Swift的设计以安全为出发点,以避免各种常见的编程错误类别。Swift能够提供实时反馈,而且可以被无缝集成到现有的 Objective-C 代码中,因此开发者能够编写安全而可靠的代码,并在节省时间的同时,创造出非常丰富的 app 体验。

在苹果官网提供了一些使用Swift语言开发的知名App,如图3-1-1所示:


图 3-1-1(来自apple.com)

Swift语言非常契合2014年WWDC的slogan:Write the code,change the world。(写代码,改变世界)。Swift作为新的编程语言,它集中了很多其它高级语言的影子,集成了它们的很多优点。它和Javascript、Go、Ruby、Python等语言都有些神似,并且它的语法更加接近自然语言,使得编程的过程变得更加简单和有趣。这些变化进一步降低了苹果平台上App开发的门槛,延续苹果一贯主张的用App来解决一切问题,而这也是苹果生态链中重要的一个环节。

随Swift推出的新版集成开发环境Xcode已经完全支持使用Swift。Xcode所附带的在线文档中也在原有的Objective-C内容的旁边放上了Swift的说明,可见苹果是多么重视Swift语言的发展。这也正好印证了前面提到的,苹果在降低自己生态链中最总要一环的门槛,这会使得苹果自身的竞争力进一步加强。

虽然目前看来,Swift语言可能还不够完美,比如可以使用的第三方库还也较少。但是它的出现,代表着接近自然语言语法的编程方法正在快速的发展,从而使每个希望编写应用程序的人都可以很容易上手编码工作,并快速开发出质量高的应用程序。



3.1.1 Swift语言的特点

  • 代码的编写更加简洁;
  • 结合Playground,可以做到真正意义上的所见即所得;
  • 便于扩展,通过桥接可以使用Object-C代码;
  • 直接支持闭包;
  • 支持面向过程编程和面向对象编程;
  • Swift全面优于Object-C语言,性能是Object-C的1.3倍,并且上手更加容易;
  • 使用自动引用计数(AutomaticReference Counting,ARC)来简化内存管理;
  • Swift是一门类型安全语言,类型安全语言需要代码里值的类型非常明确。如果您的代码中有部分值需要 Int类型,你就不能错误地传递String;
  • Object-C需要头文件.h和实现文件.m,而Swift只需要一个.swift文件;
  • Swift不再需要分号;作为代码的分隔符了;



3.1.2Swift常量和变量的定义

常量所指向的是一个特定类型的值,如数字8或者字符“Swift”。变量的值可以根据需要不断进行修改,而常量的值一经定义,是不能够被修改的。

常量和变量在使用前都需要定义 (声明),在Swift中定义常量和变量变得非常简单。您可以使用let关键词定义一个常量,使用var关键词定义一个变量。

1       let pi =3.14159265                    //常量
2        var enemyKilled = 100               //变量



在上面的代码中,首先定义了一个常量pi,表示圆周率,因为圆周率是固定不变的,所以将其定义为常量。接着又定义了一个变量enemyKilled,表示在游戏场景中消灭的敌人数量。因为玩家水平不同,消灭的敌人数量也不相同,所以这里定义为一个变量。您可以根据需要,修改变量的值。与变量不同的是,常量的值一旦确定就不能修改。如果想尝试改变一个常量的值,编译代码时就会报错。

您可以在同一行代码中,定义多个常量或变量,名称之间使用半角逗号分隔:

1        var length = 10,width =20,height = 30


您不需要为常量指定数据类型,但是必须给常量指定一个值。编译器会根据常量的值,自动判断常量的类型。在上面的代码中,编译器会认为pi常量的数据类型为浮点类型,因为它的值是一个浮点数。一旦定义了一个常量或变量,您将不可以再改变它们的数据类型。


为了能够直观地显示常量或变量的数据类型,您也可以在定义常量或变量时通过冒号设置它们的数据类型:

1      var age : Int = 24      //为变量age设置整型的数据类型

这里定义了一个名为age的变量,它的类型为整型,值为24。Swift 提供了与Object-C的相似的基础数据类型,包含整数Int,浮点数Double、Float,布尔值 Bool 以及String 字符串。同时Swift也提供了两种强大的集合数据类型:数组Array和字典Dictionary。



Swift可以使用几乎任何字符来作为常量和变量名,包括Unicode字符。Unicode 是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设定了统一并且唯一的二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求。它也包含了各种文字编码,如中文、日文、韩文、英文等字符;甚至是聊天工具中使用的表情符号等。虽然常量或变量的名称都可以包含数字,但是名称的开头不能是数字:

1       let _count = 6            //正确的命名方式
2       let count = 8              //正确的命名方式
3       let Count = 8             //正确的命名方式,Swift命名是区分大小写的
4       let 猫 = “Cat”  //正确的命名方式,中文字符可以作为常量或变量的名称
5       let  = “Cat”   //正确的命名方式
6       let default = 0            //错误的命名方式:default作为关键字不能被用作常量或变量的名称
7       let 8Count = 8           //错误的命名方式:数字不能放在名称的开头
8        let count# = 8;                   //错误的命名方式:名称中不能包含特殊字符
 


在定义常量时,通常使用大写的常量名称,这样代码将更加具有识别性:

1       let PI= 3.14159265    

在定义变量时,为了统一项目的编码风格,您可以采用驼峰命名法,或者使用下划线风格:

1       varenemyKillednumber = 100          //驼峰风格命名法
2       varenemy_killed_number = 100                //下划线风格命名法               





3.1.3常量和变量的输出

Swift使用print全局函数来输出变量或者常量。除了使用print函数,您还可以使用debugPrint、dump函数来输出常量和变量的值。Swift原来提供的println函数,已经被更名为print函数,所有print函数拥有了和println函数相同的功能,即输出变量或常量的值之后,再输出一个换行:

1       var str ="Hello,Swift"
2        
3       print(str)                              //输出内容为:Hello,Swift
4       debugPrint(str)                   //输出内容为:" Hello,Swift"
5       dump(str)                            //输出内容为:- Hello,Swift


在第3行至第5行之间的所有代码,都可以输出Hello,Swift内容。

在print语句中使用小括号,可以同时输出多个常量或变量的值,在小括号的左侧需要添加反向斜线\。

1       let name = "王丰"
2       let age ="24"
3        print("我的名字是\(name),今年\(age)岁了。")               


第3行语句的输出结果为:

我的名字是王丰,今年24岁了。


您也可以使用+号,进行输出语句的拼接,将第三行的代码替换为:

1       print("我的名字是"+name+",今年"+age+"岁了。")


输出的结果同样是:

我的名字是王丰,今年24岁了。

图书连载8:Swift的基本概念上的更多相关文章

  1. ios – 声明NSDictionary并在Swift中添加键值对?

    我一直在尝试使用类类型键和值来声明一个NSDictionary,如下所示:这里,“Category”和“SubCategory”是全局类.我知道我不能将类类型用于关键字段.但是,无论如何,我应该做到这一点.有没有办法做到这一点?如何声明专门的NSDictionary或类似的东西来做到这一点?

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

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

  3. ios – 如何使用Objective C类中的多个参数调用Swift函数?

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

  4. ios – Swift 4添加手势:覆盖vs @objc

    我想在我的视图中添加一个手势,如下所示:但是,在Swift4中,我的编译器给出了以下错误:建议添加@objc以将此实例方法公开给Objective-C.实现此目的的另一个选项将覆盖touchesBegan()函数并使用它来处理点击.我试图以“Swift”的方式做到这一点,而不必带入Obj-C.有没有纯粹的Swift方式来添加这个轻击手势而不使用@objc?

  5. ios – 将视频分享到Facebook

    我正在编写一个简单的测试应用程序,用于将视频从iOS上传到Facebook.由于FacebookSDK的所有文档都在Objective-C中,因此我发现很难在线找到有关如何使用Swift执行此操作的示例/教程.到目前为止我有这个在我的UI上放置一个共享按钮,但它看起来已禁用,从我读到的这是因为没有内容设置,但我看不出这是怎么可能的.我的getVideoURL()函数返回一个NSURL,它肯定包含视

  6. ios – 以编程方式在Swift中添加联系人

    我想在Swift中以编程方式添加联系人.我发现了一些Objective-C示例,但我没有让它们工作,甚至在Objective-C中也没有.我不希望这涉及到AddressBookUI,因为我想从我自己的UI中获取值.解决方法这是在Swift中添加联系人的快速方法.我在我的iPhone5iOS7.1上验证了它,因为我发现模拟器并不总是与我的手机对AB的东西相同.您可以添加一个按钮并指向此方法:顺便说一下–它假设你已经分配了一个地址簿var,你可以通过覆盖viewDidAppear来打开视图.它也会执行安全提示

  7. ios – 在AFNetworking中设置用户代理

    我们的iOS应用程序最近被Apple拒绝,因为它无法与我们的服务器api建立有效连接.我们使用特殊格式的用户代理来注册设备令牌等.如果用户代理不适合我们的sheme,则api会阻止请求.这一切都很好地在模拟器和真实设备上测试应用程序.用户代理设置正确,api调用工作正常.当Apple测试应用程序时,他们拒绝了它,因为应用程序无法连接到api.当我们检查服务器日志文件时,我们注意到,Apple测试人

  8. ios – 如何从变量访问属性或方法?

    是否可以使用变量作为Swift中方法或属性的名称来访问方法或属性?在PHP中,您可以使用$object->{$variable}.例如编辑:这是我正在使用的实际代码:解决方法你可以做到,但不能使用“纯粹的”Swift.Swift的重点是防止这种危险的动态属性访问.你必须使用Cocoa的Key-ValueCoding功能:非常方便,它完全穿过你要穿过的字符串到属性名称的桥,但要注意:这里是龙.

  9. ios – 将iphone应用程序重定向到苹果商店

    我有一个iPhone应用程序,当有可用的升级时,我想提示用户升级,如果他们点击升级,我想将它们重定向到苹果商店.这是怎么做到的?

  10. ios – 如何从Apple Watch调用iPhone上定义的方法

    有没有办法从Watchkit扩展中调用iPhone上的类中定义的方法?根据我的理解,目前在Watchkit和iPhone之间进行本地通信的方法之一是使用NSUserDefaults,但还有其他方法吗?

随机推荐

  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,所以编译器会报错,现在来一一解决。

返回
顶部