Swift 了解(1)

  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来声明变量

例如:

1 let max = 10;
2
3 var min =1;

对象(Objects)

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

var fastCar: Car = Car()

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

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

1 let seatsPerRow = 25
2 let numberOfRows = 25
3 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可以自己判断类型,也就是具有类型推断的能力,这使得声明变量更加容易。请见下面的例子:

1 var numberOfYears = 30
2 let name = "Steve"
3 let isMale = true
4 var bankAccountBalance = 1034.20

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

类型标注:

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

例如:

1 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),同时每个元素都有一个数组下标,准确标明此元素在数组中的位置。可以这样声明一个数组:

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

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

1 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),例如:

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

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

homeruns[ "Posey" ] // 24

增加一对键值:

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

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

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

 

输出常量和变量

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

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

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

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

分号的使用

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


1

2

3

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

类型别名

布尔值

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


1

2

3


let orangesAreOrange true

let turnipsAreDelicious false

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

 1 if turnipsAreDelicious {
 2
 3 print("Mmm,tasty turnips!")
 4
 5 } else {
 6
 7 print("Eww,turnips are horrible.")
 8
 9 }//输出"Eww, turnips are horrible."
10
11  

元组

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

let http404Error = (404,  "Not Found")

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

1 let (statusCode,statusMessage) = http404Error
2
3 print("The status code is \(statusCode)")//输出"The status code is 404"
4
5 print("The status message is \(statusMessage)") //输出"The status message is Not Found"
时间: 2024-12-09 23:09:21

Swift 了解(1)的相关文章

Apple Swift编程语言新手教程

Apple Swift编程语言新手教程 作者: 日期: gashero 2014-06-03 FROM:http://gashero.iteye.com/blog/2075324 文件夹 1   简单介绍 2   Swift入门 3   简单值 4   控制流 5   函数与闭包 6   对象与类 7   枚举与结构 1   简单介绍 今天凌晨Apple刚刚公布了Swift编程语言,本文从其公布的书籍<The Swift Programming Language>中摘录和提取而成.希望对各位的

swift 深入理解Swift的闭包

我们可用swift的闭包来定义变量的值. 先来一个简单的例子大家先感受感受. 定义一个字符串的变量的方法: 直接赋值 var str="JobDeer" 还可以用闭包的方式定义: var str:String={ return "JobDeer" }() 闭包还可以这么定义,省略了等号和括号: var str:String{ return "JobDeer" } 闭包中可以定义get方法. var str:String{ get{ return

在Swift结构体中如何实现写时复制?

结构体(Struct)在Swift语言中占有重要地位,在Swift标准库中,大约有90%的公开类型都是结构体,包括我们常用的Array.String.Dictionary.结构体相比类,一个最重要的特性就是它是值类型,而类似引用类型.值类型是通过复制值来赋值的,而不是引用同一个内存地址,这样就不存在数据共享的问题,能防止意外的数据改变,并且它是线程安全的. 举一个很简单的例子,在objc中,数组是类,是引用类型,在Swift中,数组是结构体,是值类型.因此下面的代码中: let array1 =

Swift学习之位移枚举的按位或运算

在OC里面我们经常遇到一些枚举值可以多选的,需要用或运算来把这些枚举值链接起来,这样的我们称为位移枚举,但是在swift语言里面却不能这么做,下面来讲解一下如何在swift里面使用 OC的位移枚举的区分 //位移枚举typedef NS_OPTIONS(NSUInteger, UIViewAutoresizing) { UIViewAutoresizingNone = 0, UIViewAutoresizingFlexibleLeftMargin = 1 << 0, UIViewAutores

Swift - 用UIScrollView实现视差动画效果

效果 源码 https://github.com/YouXianMing/Swift-Animations // // MoreInfoView.swift // Swift-Animations // // Created by YouXianMing on 16/8/18. // Copyright © 2016年 YouXianMing. All rights reserved. // import UIKit class MoreInfoView: UIView { var imageV

Swift 入门之简单语法(一)

定义 let 定义常量,一经赋值不允许再修改 var 定义变量,赋值之后仍然可以修改 //: # 常量 //: 定义常量并且直接设置数值 let x = 20 //: 常量数值一经设置,不能修改,以下代码会报错 // x = 30 //: 使用 `: 类型`,仅仅只定义类型,而没有设置数值 let x1: Int //: 常量有一次设置数值的机会,以下代码没有问题,因为 x1 还没有被设置数值 x1 = 30 //: 一旦设置了数值之后,则不能再次修改,以下代码会报错,因为 x1 已经被设置了数

Swift和Java关于字符串和字符的比较

1. 字符串字面量 Swift和Java关于字符串操作大同小异. Swift:字符串字面量(String Literals):我们可以在代码中包含一段预定义的字符串值作为字符串字面量. 字符串字面量是由双引号 ("") 包裹着的具有固定顺序的文本字符集.字符串字面量可以用于为常量和变量提供初始值. 代码如下: let someString = "Some string literal value" 字符串字面量可以包含以下特殊字符: 转义字符\0(空字符).\\(反

Swift Tour

设置常数使用let,设置变量使用var var myVariable = 42 myVariable = 50 let myConstant = 42 编译器可以自己推断出变量类型因此不用显式限定. 如果没有赋初值或信息不足以让编译器判断,则可以通过冒号显式声明: let implicitInteger = 70 let implicitDouble = 70.0 let explicitDouble: Double = 70 任何变量类型都不可以隐式转换,所有变量之间的转换都为显式: let

Swift备忘录

Swift 备忘录 2015-4 一.简介 1.Swift 语言由苹果公司在2010年7月开始设计,在 2014 年6月推出,在 2015 年 12 月 3 日开源 2.特点(官方): (1)苹果宣称 Swift 的特点是:快速.现代.安全.互动,而且明显优于 Objective-C 语言 (2)可以使用现有的 Cocoa 和 Cocoa Touch 框架 (3)Swift 取消了 Objective-C 的指针及其他不安全访问的使用 (4)舍弃 Objective-C 早期应用 Smallta

Swift -- 语言指南--高级运算符

原文地址: http://www.cocoachina.com/ios/20140612/8794.html 除了基本操作符中所讲的运算符,Swift还有许多复杂的高级运算符,包括了C语和Objective-C中的位运算符和移位运算. 不同于C语言中的数值计算,Swift的数值计算默认是不可溢出的.溢出行为会被捕获并报告为错误.你是故意的?好吧,你可以使用Swift为你准备的另一套默认允许溢出的数值运算符,如可溢出加&+.所有允许溢出的运算符都是以&开始的. 自定义的结构,类和枚举,是否可