Apple取消了oc的指针以及其他不安全的访问的使用,舍弃的smalltalk语法,全面改为点语法,提供了类似java的命名空间 范型 重载;

  首先我们了解一下Swift这门语言。Swift就像C语言一样,使用变量来进行存储并通过变量名来关联值。在swift中广泛的使用着不可变的变量,也就是我们常说的常量。但是Swift远远比C语言的常量强大。记住这里说的是比C的常量强大,并不是比C语言强大。这点要理解清楚。在Swift中如果你需要处理的值不需要改变,那使用常量的可以让我们的代码更清晰地表达我们的意图和逻辑。

  除了我们熟悉的类型,Swift还增加了Objective-C中没有的高阶数据类型比如元组(Tuple)。元组可以让你创建或者传递一组数据,比如作为函数的返回值时,我们可以用一个元组可以返回多个值

  Swift增加了可选(optional)类型,用于处理值缺失的情况。所谓的可选类型,接触过OC的肯定比较清楚一下。可选类型像是Objective-C中使用的nil,但是它可以在任何类型上,不仅仅是类!Swift有了可选类型的存在比OC中的nil指针更加安全也更具表现力。它是Swift许多强大类型的重要组成部分。

常量和变量

常量和变量必须在使用前声明,用let来声明常量,用var来声明变量

例如:

 let max = ;

 var min =;

对象(Objects)

变量也可以表示对象,对象的类型就是类的名字。记住,类就是这个对象的蓝图,类里面包含了对象所有的属性和行为。
下面这行代码,用var表示这是一个变量,用fastCar作为变量名,冒号后声明这个变量是对象类型,在这里,就是Car,最后,用等号表示这个变量的初始值是一个新的车对象:

var fastCar: Car = Car()

字符串中的变量(Variables in Strings)

使用字符串插入(string interpolation),可以直接在变量中增加字符串。字符串插入这个术语是指在一个字符串里使用占位符来产生一个字符串。程序运行后,这些占位符就会直接调用。在这里,字符串是用双引号表示的,那么占位符是用\()表示的,两个括号中是需要插入的字符串。字符串插入这个方法可以将一个非字符串的变量方便地转换为字符串类型:

 let seatsPerRow =
let numberOfRows =
var seatsString = "In the theater, there are \(numberOfRows) rows and \(seatsPerRow) seats in each row." //In the theater, there are 15 rows and 25 seats in each other row.

类型推断(Type Inference)

为每一个变量和常量声明类型可是一件体力活,苹果公司的工程师一直致力于让开发者的工作更轻松。基于你提供的等号右边的值,Swift可以自己判断类型,也就是具有类型推断的能力,这使得声明变量更加容易。请见下面的例子:

 var numberOfYears =
let name = "Steve"
let isMale = true
var bankAccountBalance = 1034.20

冒号和冒号后面的类型就不需要了,因为Swift可以根据等号右边的值来推断类型,然后自动设定变量的类型。这样能节省不少时间,也能让代码更简洁。

类型标注:

当我们声明常量或者变量的时候可以加上类型标注,说明常量或者变量中要存储的值的类型。如果要添加类型标注,需要在常量或者变量名后面加上一个冒号和空格,然后加上类型名称。

例如:

var welcomeMessage:String

在welcomeMessage中我们可以理解为:”声明一个类型为String,名字为welcomeMessage的变量”

类型为String的意思是可以存储任意String类型的值

welcomeMessage = “Hello”

我们在Swift中可以根据自己喜欢的字符作为常量和变量名,包括Unicode字符!

例如:let $ = 3.3333,let你好=”Hello word!”,let?? =“dogcow”

注意:常量与变量名不能包含数学符号,箭头,保留的(或者非法的)Unicode码位,连线与制表符。也不能以数字开头,但是可以在常量与变量名的其他地方包含数字。

注意:如果我们需要使用Swift中保留关键字相同的名称作为常量或者变量名,我们可以使用反引号(^)将关键字包围的方式将其作为名字使用,但是无论如何我们都应当避免使用关键字作为常量或变量名。

集合(Collection)

  在某些情况下,有必要将许多变量或常量更好地组织在一起,Swift提供2种集合类型来保存和组织这些变量。

数组(Arrays)

  数组(Array)是按照聚体顺序存储多个变量的容器。数组可以存储几乎无限的元素(item),同时每个元素都有一个数组下标,准确标明此元素在数组中的位置。可以这样声明一个数组:

 var names: [ String ] = [ "Steve", "Jeff", "Andy", "Andrew", "Cole", "Mike", "Mikey" ]

  开头还是var,接着是冒号,然后是方括号,方括号里是数组的类型,等号的右边,用方括号括起来所有的数组元素,里面每个数组元素用逗号分开。
在Swift中,数组中所有的元素必须是同样的类型,这以为着一个数组能存储所有的字符串,如上面的例子,但是不能存储整型和字符串2种不同的类型的元素。数组只能存储同样类型的变量。
对于一个既定的数组,Swift可以自行判断出类型,没有必要专门写出数组的类型,所以上面的数组也可以写成这样:

 var names = [ "Steve", "Jeff", "Andy" ]

也可以给你的数组增加一个数组:

var names = [ "Steve", "Jeff", "Andy", "Wally" ]
var parents = [ "Mike", "Adam", "Nick" ]
names = names + parents // [ "Steve", "Jeff", "Andy", "Wally", "Mike", "Adam", "Nick" ]

词典(Dictionaries)

数组不是唯一的集合类型,词典也可以存储多个变量,用键(Key)和值(value)将多个变量组织在一起。键值的工作原理和你书架上的牛津大词典类似,键(Key)是你要查找的单词,而值(value)是这个单词的释义。词典是无序存储的,所以只能使用键(key)来获取某个值(value),例如:

 var homeruns : [ String : Int ] = [ "Posey" : , "Pagan" : , "Pence" :  ]

在这个例子中,有三个键(keys):"Posey" , "Pagan" , "Pence",每个键都有对应的值。提高相关的键,写在中括号中,就能获取相对应的值:

homeruns[ "Posey" ] //

增加一对键值:

var homeruns : [ String : Int ] = [ "Posey" : , "Pagan" : , "Pence" :  ]
homeruns[ "Sandoval" ] = // [ "Posey" : 24, "Pagan" : 19, "Pence" : 15, "Sandoval" : 10 ]

将键对应的值设置为空(nil),就可以删除这对键值。nil是空值,我们将在章节结束的时候更深入的介绍nil。删除键值方法:

 homeruns [ "Sandoval" ] = nil     //   [ "Posey" : 36, "Pagan" : 19, "Pence" : 15 ]

 

输出常量和变量

在Swift中print(_:separator: terminator:)函数来输出当前常量或变量的值:

注:这也是区别OC语言之处

Swift用字符串插值(string interpolation)的方式把常量名或者变量名当做占位符加入到长字符串中,Swift会用当前常量或变量的值替换这些占位符。将常量或变量名放入圆括号中,并在开括号前使用反斜杠将其转义:

 print("The current value of friendlyWelcome is \(friendlyWelcome)")     //输出"The current value of friendlyWelcome is Bonjour!

分号的使用

与其他大部分编程语言不同,Swift并不强制要求我们在每条语句的结尾处使用分号(;),当然,你也可以按照 你自己的习惯添加分号。有一种情况下必须要用分号,即我们打算在同一行内写多条独立的语句:

let cat ="?"; print(cat) //输出"?"

类型别名

布尔值

Swift有一个基本的布尔类型,叫做Bool。布尔值指逻辑上的值,因为它们只能是真或者假。Swift有两个布尔常量,true和false:

let orangesAreOrange = true

let turnipsAreDelicious = false

在我们编写条件语句,比如说if语句的时候,布尔值非常的好用

 if turnipsAreDelicious {

 print("Mmm,tasty turnips!")

 } else {

 print("Eww,turnips are horrible.")

 }//输出"Eww, turnips are horrible."

元组

元组把多个值组合成一个复合值。元组内的值可以是任意类型,并不要求是相同类型

let http404Error = (,  "Not Found")

我们可以把任意顺序的类型组合成一个元组,这个元组可以包含所有类型

 let (statusCode,statusMessage) = http404Error

 print("The status code is \(statusCode)")//输出"The status code is 404"

 print("The status message is \(statusMessage)") //输出"The status message is Not Found"

Swift 了解(1)的更多相关文章

  1. iOS代码规范(OC和Swift)

    下面说下iOS的代码规范问题,如果大家觉得还不错,可以直接用到项目中,有不同意见 可以在下面讨论下. 相信很多人工作中最烦的就是代码不规范,命名不规范,曾经见过一个VC里有3个按钮被命名为button ...

  2. Swift与C#的基础语法比较

    背景: 这两天不小心看了一下Swift的基础语法,感觉既然看了,还是写一下笔记,留个痕迹~ 总体而言,感觉Swift是一种前后端多种语言混合的产物~~~ 做为一名.NET阵营人士,少少多多总喜欢通过对 ...

  3. iOS开发系列--Swift语言

    概述 Swift是苹果2014年推出的全新的编程语言,它继承了C语言.ObjC的特性,且克服了C语言的兼容性问题.Swift发展过程中不仅保留了ObjC很多语法特性,它也借鉴了多种现代化语言的特点,在 ...

  4. 算法与数据结构(十七) 基数排序(Swift 3.0版)

    前面几篇博客我们已经陆陆续续的为大家介绍了7种排序方式,今天博客的主题依然与排序算法相关.今天这篇博客就来聊聊基数排序,基数排序算法是不稳定的排序算法,在排序数字较小的情况下,基数排序算法的效率还是比 ...

  5. 算法与数据结构(十五) 归并排序(Swift 3.0版)

    上篇博客我们主要聊了堆排序的相关内容,本篇博客,我们就来聊一下归并排序的相关内容.归并排序主要用了分治法的思想,在归并排序中,将我们需要排序的数组进行拆分,将其拆分的足够小.当拆分的数组中只有一个元素 ...

  6. Swift enum(枚举)使用范例

    //: Playground - noun: a place where people can play import UIKit var str = "Hello, playground& ...

  7. swift开发新项目总结

    新项目用swift3.0开发,现在基本一个月,来总结一下遇到的问题及解决方案   1,在确定新项目用swift后,第一个考虑的问题是用纯swift呢?还是用swift跟OC混编      考虑到新项目 ...

  8. swift 中关于open ,public ,fileprivate,private ,internal,修饰的说明

    关于 swift 中的open ,public ,fileprivate,private, internal的区别 以下按照修饰关键字的访问约束范围 从约束的限定范围大到小的排序进行说明 open,p ...

  9. 【swift】BlockOperation和GCD实用代码块

    //BlockOperation // // ViewController.swift import UIKit class ViewController: UIViewController { @I ...

  10. iOS开发系列--Swift 3.0

    概述 从写第一篇Swift文章的时候到现在Swift已经从1.2发展到了今天的3.0,这期间由于Swift目前还在发展阶段并不能向下兼容,因此第一篇文章中的部分代码在当前的Xcode环境中已经无法运行 ...

随机推荐

  1. 蓝桥杯-猜年龄-java

    /* (程序头部注释开始) * 程序的版权和版本声明部分 * Copyright (c) 2016, 广州科技贸易职业学院信息工程系学生 * All rights reserved. * 文件名称: ...

  2. 详细解剖大型H5单页面应用的核心技术点

    项目 Xut.js 阐述下开发中一个比较核心的优化技术点,这是一套平台代码,并非某一个插件功能或者框架可以直接拿来使用,核心代码大概是6万行左右(不包含任何插件) .这也并非一个开源项目,不能商业使用 ...

  3. Dalsa Sherlock 直连千兆网相机(通用驱动)

    支持 Sherlock 7.1.7.2,用于千兆网相机与 Sherlock 的连接. 可适用于很多厂商的相机,如:巴斯勒(Basler),JAI,堡盟相机(Baumer),灰点相机(Point Gre ...

  4. OC的内存管理(一)

    在OC中当一个APP使用的内存超过20M,则系统会向该APP发送 Memory Warning消息,收到此消息后,需要回收一些不需要再继续使用的内存空间,比如回收一些不再使用的对象和变量等,否则程序会 ...

  5. 基于Kubernetes的WAF集群介绍

    Kubernetes是Google开源的容器集群管理系统.它构建Docker技术之上,为容器化的应用提供资源调度.部署运行.服务发现.扩容缩容等整一套功能,可看作是基于容器技术的PaaS平台. 本文旨 ...

  6. Spark实战之读写HBase

    1 配置 1.1 开发环境: HBase:hbase-1.0.0-cdh5.4.5.tar.gz Hadoop:hadoop-2.6.0-cdh5.4.5.tar.gz ZooKeeper:zooke ...

  7. layui框架部分功能介绍

    注意:代码的所有功能都没有导入layui的css样式 一,分页功能 layui框架分页使用,其实layui分页非常简单只需要传入一个总页数就可以很好运用这个功能 下面就看一下我对layui框架分页的介 ...

  8. nmon指标

    表字段分析 关键指标类型 关键指标名称 关键指标含义 SYS_SUMM CPU% cpu占有率变化情况: IO/sec IO的变化情况: AAA AIX AIX版本号: cpus CPU数量: har ...

  9. 《Android进阶》之第六篇 Fragment 的使用2

    最近通过学习,对fragment的使用有了新的认识. 一开始接触android的时候,很是受不了这个fragment,总感觉它把一个简单的事情搞复杂啦,所以每次新建工程的时候总是固执的选择empty ...

  10. Codeforces Round #392 (Div. 2)

    D题,给出n,k,k是n进制数,但是大于十进制时,它的表示方法仍为十进制那种,比如16进制下的15,我们可以看成就是15,或者1|5,也就是1×16+5 = 21,让你求出能表达的最小十进制数 从后面 ...