Swift 是一种适用于 iOS 和 OS X 应用的全新编程语言,它建立在最好的 C 和 Objective-C 语言之上,并且没有 C 语言的兼容性限制。Swift 采用安全的编程模式,增加了现代功能使 编程更容易、更灵活、更有趣。Swift 以成熟且备受宠爱的 Cocoa 和 Cocoa Touch 框架为 支撑,这是一个重新构想软件开发的机会。

——我的第一行Swift代码

import Foundation             //表示引入Foundation框架

var str = "Hello World"    //声明str变量,var表示声明变量

print(str)      //print(_:)是一个函数,能够将变量或常量输出到控制台

——使用Web网站编写Swift代码

Swift程序不能在Windows其他平台编译和运行,有人提供了一个网站swiftstub.com,可以在任何平台下编译和运行Swift程序。

——Swift 2.0之后增加的关键字

在Swift 2.0之后增加defer、guard、repeat、catch、rethrows、throw、throws和try关键字,其中repeat关键字替代do - while循环中的do,即中repeat - while循环。而do关键字用于错误处理。catch、rethrows、throw、throws和try是错误处理关键字。     错误处理是Swift 2.0之后增加新内容。

——用Playground工具编写Swift

用Playground编写Swift代码目的是为了学习、测试算法、验证想法和可视化看到运行结果,不是为了使最终的程序编译和发布。
Playground程序运行 ①区域是代码编写视图;②区域是运行结果视图;③区域是时间轴视图;④区域是控制台视图,使用print等日志函数将结果输出到控制台,可以通过左下角的 按钮隐藏和显示控制台。

——Swift标识符和关键字

标识符就是给变量、常量、方法、函数、枚举、结构体、类、协议等由开发人员指定的名字。

Swift中命名规则:

·区分大小写,Myname与myname是两个不同的标识符;

·标识符首字符可以以下划线(_)或者字母开始,但不能是数字;

·标识符中其他字符可以是下划线(_)、字母或数字。

Swift语言常见的关键字有以下4种

·与声明有关的关键字:class、deinit、enum等。

·与语句有关的关键字:break、case、continue等。

·表达式和类型关键字:as、catch、dynamicType、false等。

·在特定上下文中使用的关键字:associativity、convenience、dynamic等。

注意:Swift中关键字是区分大小写的,所以class和Class是不同的,那么Class不是Swift的关键字。

——常量和变量

在Swift中,用let声明一个常量;用var来声明一个变量

我觉得:原则上优先使用let,它有很多好处,可以防止程序运行过程中不必要的修改、提高程序的可读性。特别是引用数据类型声明时候经常采用let声明,虽然在业务层面上并不是一个常量,而是防止程序运行过程中错误地修改它引用。

——Swift 2.0中的print函数4种重载形式

print(_:)。输出变量或常量到控制台,并且换行。

print(_:_:)。输出变量或常量到指定类型的流中,并且换行。

print(_:appendNewline:)。输出变量或常量到控制台,appendNewline参数是布尔值,true表示换行,false表示不换行。

print(_:_:appendNewline:) 。输出变量或常量指定类型的流中,appendNewline参数是布尔值,true表示换行,false表示不换行。

——在Swift中,表达式有3种形式

1、不指定数据类型    var a1 = 10

2、指定数据类型      var a1:Int  = 10

3、使用分号          var a1:Int = 10; var a2:Int = 20

在Swift语言中,一条语句结束后可以不加分号也可以添加分号,但是有一种情况必须要用分号,那就是多条语句写在一行的时候,需要通过分号来区别语句。
例如:  var a1:Int = 10; var a2:Int = 20;

——Swift的运算符

在Swift语言中主要的运算符包括算术、关系、逻辑、位运算符等

一元运算符:
-    取反符号 取反运算
++    自加一 先取值再加一,或先加一再取值
--    自减一 先取值再减一,或先减一再取值

二元运算符:
+   加  求和,还可用String类型,进行字符串连接操作
-   减  求差
*   乘  求积
/   除  求商
%     取余 求余数

几个特殊运算符:

•  引用号(.):实例调用属性、方法等操作符。

•  问号(?):用来声明可选类型。

•  感叹号(!):对可选类型值进行强制拆封。

•  箭头(->):说明函数或方法返回值类型。

•  冒号运算符(:):用于字典集合分割“键值”对。

——Swift中数据类型

整型、浮点型、布尔型、字符、字符串这些类型是一定有的,其中集合、枚举、结构体、类也是Swift中的数据类型。元组是Swift中特有的。
元组是一种数据结构,在数学中应用广泛。在计算机科学中,元组是关系数据库中的基本概念,元组表中的一条记录,每列就是一个字段。因此在二维表里,元组也称为记录。

现在使用Swift语法表示Student元组就是:

第一种写法

("1001", "张三", 30, 90)

第二种写法

(id:"1001", name:"张三", english_score:30, chinese_score:90)

——数据类型之整型和浮点型

Swift提供8、16、32、64位形式的有符号及无符号整数。这些整数类型遵循C语言的命名规约,我归纳了Swift中的整型:

整型示例:
print("UInt8 range: \(UInt8.min) ~ \(UInt8.max)")
print("Int8 range: \(Int8.min) ~ \(Int8.max)")
print("UInt range: \(UInt.min) ~ \(UInt.max)")
print("UInt64 range: \(UInt64.min) ~ \(UInt64.max)")
print("Int64 range: \(Int64.min) ~ \(Int64.max)")
print("Int range: \(Int.min) ~ \(Int.max)")
输出结果如下:
UInt8 range: 0 ~ 255
Int8 range: -128 ~ 127
UInt range: 0 ~ 18446744073709551615
UInt64 range: 0 ~ 18446744073709551615
Int64 range: -9223372036854775808 ~ 9223372036854775807
Int range: -9223372036854775808 ~ 9223372036854775807

上述代码是通过整数的min和max属性计算各个类型的范围。
浮点型主要用来储存小数数值,也可以用来储存范围较大的整数。它分为浮点数(float)和双精度浮点数(double)两种,双精度浮点数所使用的内存空间比浮点数多,可表示的数值范围与精确度也比较大。

——字符串的插入、删除和替换

splice(_:atIndex:)。在索引位置插入字符串。

insert(_:atIndex:)。在索引位置插入字符。

removeAtIndex(_:)。在索引位置删除字符。

removeRange(_:)。删除指定范围内的字符串。

replaceRange(_:, with: String) 。使用字符串或字符替换指定范围内的字符串。

代码:

var str = "Swift"

print("原始字符串:\(str)")

str.splice("Objective-C and ".characters, atIndex: str.startIndex)

print("插入字符串后:\(str)")

str.insert(".", atIndex: str.endIndex)

print("插入.字符后:\(str)")

str.removeAtIndex(str.endIndex.predecessor())

print("删除.字符后:\(str)")

var startIndex = str.startIndex

var endIndex = advance(startIndex, 9)

var range = startIndex...endIndex

str.removeRange(range)

print("删除范围后:\(str)")

startIndex = str.startIndex

endIndex = advance(startIndex, 0)

range = startIndex...endIndex

str.replaceRange(range, with: "C++")

print("替换范围后:\(str)")

输出结果:

原始字符串:Swift

插入字符串后:Objective-C and Swift

插入.字符后:Objective-C and Swift.

删除.字符后:Objective-C and Swift

删除范围后:C and Swift

替换范围后:C++ and Swift

——请注意数字类型之间的转换

在C、Objective-C和Java等其他语言中,整型之间有两种转换方法:

1、 从小范围数到大范围数转换是自动的;
2、 从大范围数到小范围数需要强制类型转换,有可能造成数据精度的丢失。

而在Swift中这两种方法是行不通的,需要通过一些函数进行显式地转换,代码如下:

let historyScore:UInt8 = 90

let englishScore:UInt16 = 130

let totalScore = historyScore + englishScore  //错误

程序就会有编译错误,原因是historyScore是UInt8类型,而englishScore是UInt16类型,它们之间不能转换。

两种转换方法:

· 一种是把UInt8的historyScore转换为UInt16类型。由于是从小范围数转换为大范围数,这种转换是安全的。

代码: let totalScore = UInt16(historyScore) + englishScore  //是正确的转换方法。

·另外一种是把UInt16的englishScore转换为UInt8类型。由于是从大范围数转换为小范围数,这种转换是不安全的,如果转换的数比较大可能会造成精度的丢失。

代码:let totalScore = historyScore + UInt8(englishScore)  //是正确的转换方法。

整型与浮点型之间的转换与整型之间的转换类似:

let historyScore:Float = 90.6

let englishScore:UInt16 = 130

let totalScore = historyScore + englishScore  //错误

let totalScore = historyScore + Float(englishScore)  //正确,安全

let totalScore = UInt16(historyScore) + englishScore  //正确,小数被截掉

——字典集合

Swift字典表示一种非常复杂的集合,允许按照某个键来访问元素。字典是由两部分集合构成的,一个是键(key)集合,一个是值(value)集合。键集合是不能有重复元素的,而值集合是可以重复的,键和值是成对出现的。
字典声明与初始化
Swift字典类型是Dictionary,也是一个泛型集合。
在声明一个Dictionary类型的时候可以使用下面的语句之一。

var studentDictionary1: Dictionary<Int, String>var studentDictionary2: [Int: String]

声明的字典需要进行初始化才能使用,字典类型往往是在声明的同时进行初始化的。

var studentDictionary1: Dictionary<Int, String>
= [102 : "张三",105 : "李四", 109 : "王五"]
var studentDictionary2 = [102 : "张三",105 : "李四", 109 : "王五"]
let studentDictionary3 = [102 : "张三",105 : "李四", 109 : "王五"]

字典遍历
字典遍历过程可以只遍历值的集合,也可以只遍历键的集合,也可以同时遍历。这些遍历过程都是通过for-in循环实现的。

var studentDictionary = [102 : "张三",105 : "李四", 109 : "王五"]
print("---遍历键---")for studentID in studentDictionary.keys { print("学号:\(studentID)")
}
print("---遍历值---")for studentName in studentDictionary.values {print("学生:\(studentName)")
}
print("---遍历键:值---")for (studentID, studentName) in studentDictionary {print ("\(studentID) : \(studentName)")
}

运行结果如下:
---遍历键---
学号:105
学号:102
学号:109
---遍历值---
学生:李四
学生:张三
学生:王五
---遍历键:值---
105 : 李四
102 : 张三
109 : 王五

——Swift中数组集合

数组(Array)是一串有序的由相同类型元素构成的集合。数组中的集合元素是有序的,可以重复出现。

声明一个Array类型的时候可以使用下面的语句之一。

var studentList1: Array<String>

var studentList2: [String]

声明的Array还不能用,还需要进行初始化,Array类型往往在声明的同时进行初始化。示例代码如下:

var studentList1: Array<String> = ["张三","李四","王五","赵六"]

var studentList2: [String]  = ["张三","李四","王五","赵六"]

let studentList3: [String]  = ["张三","李四","王五","赵六"]

var studentList4 = [String]()

数组遍历

数组最常用的操作是遍历,就是将数组中的每一个元素取出来,进行操作或计算。整个遍历过程与循环分不开,可以使用for-in循环。

var studentList: [String]  = ["张三","李四","王五"]

for item in studentList {

print (item)

}

for (index, value) in studentList.enumerate() {

print("Item \(index + 1 ) : \(value)")

}

运行结果如下:

张三

李四

王五

Item 1 : 张三

Item 2 : 李四

Item 3 : 王五

——函数参数传递

函数的语法格式如下:

func函数名(参数列表) ->返回值类型{

语句组

return返回值

}

函数:关键字是func。

多个参数列表之间可以用逗号(,)分隔,也可以没有参数。

使用箭头“->”指示返回值类型。返回值有单个值和多个值。如果函数没有返回值,则“->返回值类型”部分可以省略。

如果函数有返回值,就需要在函数体最后使用return语句;如果没有返回值,则函数体中可以省略return语句。

函数定义示例代码如下:

func rectangleArea(width:Double, height:Double) -> Double {

let area = width * height

return area

}

print("320x480的长方形的面积:\(rectangleArea(320, height:480))")

下面介绍几种不同形式的传递参数。

1.使用外部参数名

为每个参数提供一个可以在函数外部使用的名称,称为外部参数名,修改rectangleArea函数的定义如下:

func rectangleArea(W width:Double, H height:Double) -> Double {

let area = width * height

return area

}

在局部参数名之前给一个“外部参数名”,用空格分隔。定义代码中的W和H就是外部参数名。调用代码如下:

print("320x480的长方形的面积:\(rectangleArea(W:320, H:480))")

如果我们提供了外部参数名,那么在函数调用时,必须使用外部参数名,所以W和H不能省略。

2.省略外部参数名

Swift 2.0提供省略外部参数名可能,在定义函数时,使用下划线(_)表示外部参数名,示例代码如下:

func rectangleArea(width:Double, _ height:Double) -> Double {

let area = width * height

return area

}

这样函数在调用时就可以省略外部参数名,代码如下:

print("320x480的长方形的面积:\(rectangleArea(320, 480))")

在定义函数时第一个参数不需要使用下划线(_),默认第一个参数名是省略的,其他参数名要想省略则需要使用下划线(_)符号。

3.参数默认值

在定义函数的时候可以为参数设置一个默认值,当调用函数的时候可以忽略该参数。看下面的一个示例:

func makecoffee(type :String = "卡布奇诺") -> String {

return "制作一杯\(type)咖啡。"

}

在调用的时候,如果调用者没有传递参数,则使用默认值。调用代码如下:

let coffee1= makecoffee("拿铁")

let coffee2= makecoffee()

最后输出结果如下:

制作一杯拿铁咖啡。

制作一杯卡布奇诺咖啡。

4.可变参数

Swift中函数的参数个数可以变化,它可以接受不确定数量的输入类型参数,它们具有相同的类型。我们可以通过在参数类型名后面加入(...)的方式来指示这是可变参数。

下面看一个示例:

func sum(numbers:Double...) -> Double {

var total: Double = 0

for number in numbers {

total += number

}

return total

}

下面是两次调用sum函数代码:

sum(100.0, 20, 30)

sum(30, 80)

可以看到每次传递参数的个数是不同的。

这是我在学Swift整理的基础笔记,希望给更多刚学IOS开发者带来帮助,在这里博主非常感谢大家的支持!

更多的请到参考我下一篇博文。之后还在持续更新中。。。

转载于:https://www.cnblogs.com/ZRJ-boke/p/6103943.html

从0开始学Swift笔记整理(一)相关推荐

  1. 从0开始学Swift笔记整理(五)

    这是跟在上一篇博文后续内容: --Core Foundation框架 Core Foundation框架是苹果公司提供一套概念来源于Foundation框架,编程接口面向C语言风格的API.虽然在Sw ...

  2. 动手学pytorch笔记整理12

    conv-layer 二维卷积层 二维互相关运算 特征图和感受野 填充和步幅 填充 步幅 二维卷积层 卷积神经网络(convolutional neural network)是含有卷积层(convol ...

  3. Python3.5从0开始学读书笔记——第七章 函数

    调用函数 函数是指用于进行某种计算的一些列语句的有名称的组合.Python3内置了很多有用的函数,可以直接调用. 要调用一个函数,就要知道函数的名称和参数.参加官网帮助文档地址:https://doc ...

  4. 读《从0开始学大数据》-- 学习笔记和感想随笔(一)

    主要记录阅读<从0开始学大数据>课程的学习笔记.课程系统性的介绍大数据的发展史.大数据系统的原理及架构.大数据生态体系中的主要产品.如何进行呢大数据开发实践.大数据平台开发及系统集成.使用 ...

  5. 【从 0 开始学架构】学习笔记 Day4 “4+1”视图模型

    文章目录 一.模型 (1)模型 (2)软件开发的本质 (3)架构设计 二.4+1视图模型 1)定义 2)组成 (1)场景视图 (2)逻辑视图 (3)开发视图 (4)物理视图 (5)过程视图 三.UML ...

  6. 【从 0 开始学架构】学习笔记 Day5 高性能基本概念

    文章目录 一.性能 二.性能在计算机世界的两个方面表现 三.软件系统高性能复杂度两个方面 1)单机复杂度 2)集群复杂度 (1)任务分配 (2)任务分解 四.应对高并发挑战的两个技术方向 1.垂直伸缩 ...

  7. 《繁凡的深度学习笔记》前言、目录大纲 一文让你完全弄懂深度学习所有基础(DL笔记整理系列)

    <繁凡的深度学习笔记>前言.目录大纲 (DL笔记整理系列) 一文弄懂深度学习所有基础 ! 3043331995@qq.com https://fanfansann.blog.csdn.ne ...

  8. 一文让你完全弄懂逻辑回归和分类问题实战《繁凡的深度学习笔记》第 3 章 分类问题与信息论基础(上)(DL笔记整理系列)

    好吧,只好拆分为上下两篇发布了>_< 终于肝出来了,今天就是除夕夜了,祝大家新快乐!^q^ <繁凡的深度学习笔记>第 3 章 分类问题与信息论基础 (上)(逻辑回归.Softm ...

  9. 一文让你完全弄懂回归问题、激活函数、梯度下降和神经元模型实战《繁凡的深度学习笔记》第 2 章 回归问题与神经元模型(DL笔记整理系列)

    <繁凡的深度学习笔记>第 2 章 回归问题与神经元模型(DL笔记整理系列) 3043331995@qq.com https://fanfansann.blog.csdn.net/ http ...

最新文章

  1. python基础知识整理 第三节 :函数
  2. 开发必备快速定位排查日志 9 大类命令详解
  3. mac装windows遇到的问题总结
  4. Linu20180415三周第三次课(4月4日)
  5. boost::hana::is_disjoint用法的测试程序
  6. Android Animation动画(很详细)
  7. IO-00. Hello World! (5)
  8. linux中yum搭建与配置
  9. mysql的安装、启动和基础配置 —— mac版本
  10. Hadoop之MapReduce介绍
  11. matlab端到端仿真中基站功率,基于matlab的cdma通信系统分析及仿真
  12. 使用vmware12安装Ubuntu 遇到的两个问题和解决
  13. 高中计算机网络技术专业的自我鉴定,计算机网络技术专业的自我鉴定(精选5篇)...
  14. ubuntu软件中心打不开Python error
  15. systemd (简体中文)
  16. android黑名单挂断电话(endCall)反射方法获取
  17. pos 指令集 linux,Linux系统下10大开源POS系统
  18. 全国高级项目经理人数知多少?(数据统计截止2013年6月22日)
  19. VMware Workstation 不可恢复错误: (vmx)Exception 0xc0000006 (disk error while paging) has occurred.
  20. Excel 中连续生成开始日期和结束日期之间的日期

热门文章

  1. android 6.0 logcat机制(三)logd处理请求log
  2. Android 5.0及以上实现屏幕截图
  3. Android的IPC机制Binder
  4. JZOJ 5455. 【NOIP2017提高A组冲刺11.6】拆网线
  5. python背诵技巧_python历史背诵
  6. 20个linux常用命令,Linux20个常用命令整理(基础)
  7. MATLAB GUI编程中几个有用的程序段
  8. python输出到文件
  9. AtCoder AGC032E Modulo Pairing (二分、贪心结论)
  10. 【学习笔记】线段树的数组大小下限及证明