一、输出语句

print("Hello World")
print("Hello World 11", "Hello World 22", separator: "*****", terminator: "\n")

  

二、简单值

  常量使用 let (只能赋值一次,赋值后值不能改变),变量使用 var。

let myConst = 10
var myVariable = 50
myVariable = 15

  常量和变量在声明时候指定类型是可选的,如果声明的时候没有给定类型,编译器会自动推断类型。如果初始值不能提供足够的类型说明,则需要在声明的时候显示声明类型。  

let myDoubleConst: Double = 70;

  值永远不会被隐式转换为其他类型。如果你需要把一个值转换成其他类型,请显式转换。

let myString = "Hello World"
let myFloat = 4.0 let sum = myString + String(myFloat)
print("sum =", sum)

  简单的把值转换成字符串。  

let myConst1 = 50
let myConst2 = 100
print("myConst1 = \(myConst1); myConst2 = \(myConst2)")
print("sum = \(myConst1 + myConst2)")

  使用 [] 定义 Array 和 Dictionary,以及修改其内容。

var myArray = ["apple", "boy", "cat", "dog"]
myArray[0] = "www"
print(myArray) var myDict = [
"key1" : "value1",
"key2" : "value2"
]
myDict["key3"] = "value3"
print(myDict)

  创建空 Array 和 Dictionary -- 确定类型。

let emptyArray = [String]()
let emptyDict = [String: Float]()

  创建空 Array 和 Dictionary -- 不确定类型。

let emptyArray1 = []
let emptyDict1 = [:]

 

三、控制流

  使用 if 和 switch 来进行条件操作,使用 for-inforwhile 和 do-while 来进行循环。包裹条件和循环变量括号可以省略,但是语句体的大括号是必须的。  

let scoreList = [11, 22, 33, 44, 55, 66]
var tmpScore = 0
for score in scoreList {
if (score > 50) {
tmpScore += 3
}
else {
tmpScore += 1
}
}
print(tmpScore)

  在 if 语句中,条件必须是一个布尔表达式——像 if score { ... } 这样的代码是错误的。可以使用 if 和 let 来处理这种可选变量值 (可选变量值:有可能是一个具体的值,也有可能是 nil 表示缺失)

var optionalName: String? = "Eileen Leung"
optionalName = nil
var greeting = "Hello" if let name = optionalName { // 相当于 optionalName != nil
greeting = "\(greeting), \(optionalName)"
}
else {
greeting = "\(greeting), Stranger"
}
print(greeting)

  switch 支持任意类型的数据以及各种比较操作——不限于整数或等值测试。default 不能缺少。运行 switch 中匹配到的子句之后,程序会退出 switch 语句,并不会继续向下运行,所以不需要在每个子句结尾写 break

let myString = "Eileen Leung"
let result: String?; switch myString {
case "Ada":
result = "This is \(myString)"
case "Cherry", "Wing": // Cherry 或者 Wing
result = "This Cherry Or Wing"
case let x where x.hasPrefix("Eileen"):
result = "This is Eileen"
default:
result = nil
}
print(result) // 输出结果: This is Eileen

  使用 for-in 来遍历字典。

let numberDict = [
"key1": [10, 20, 30, 40, 50, 100],
"key2": [1, 3, 5, 7],
"key3": [2, 4, 6, 8, 10]
] var sum = 0
for (key, numbers) in numberDict {
for num in numbers {
sum += num
}
}
print(sum)
let myDictionary = [
"key1": [10, 20, 30, 40, 50, 100],
"key2": ["apple", "boy", "cat", "dog", "egg", "flight", "green", "hat", "island", "jail"],
"key3": [1.5, 2.5, 3.5]
] for (key, valueList) in myDictionary {
print(key, ": [")
for value in valueList {
print("\t", value, ",")
}
print("}")
}

  使用 while 来重复运行一段代码直到不满足条件。循环条件可以在开头也可以在结尾。

var n = 2
while n < 100 {
n = n * 2
} var m = 2
repeat {
m = m * 2
} while m < 100

  在循环中使用 ..< 和 ... 来表示范围,其中 ..< 创建的范围不包含上界,如果想包含的话需要使用 ... 。

var firstForLoop = 0
for i in 0..<3 { // 相当于 for var i = 0; i < 3; ++i
firstForLoop += i
}
var secondForLoop = 0
for j in 0...3 { // 相当于 for var j = 0; j <= 3; ++j
secondForLoop += 1
}

  

四、函数和闭包

  使用 func 来声明一个函数,使用名字和参数来调用函数。使用 -> 来指定函数返回值。

func sum(numbers: Array<Int>, base: Int) -> Int {
var sum = base
for number in numbers {
sum += number
}
return sum
} // 调用
let myNumbers = [1, 3, 5, 7, 9]
let sumValue = sum(myNumbers, base: 50)
print(sumValue)

  返回多个参数。

func getFloatValue() -> (value1: Float, value2: Float, value3: Float) {
return (1.0, 5.0, 3.5)
}

  参数数量可变。

func sumOf(numbers: Int...) -> Int {
var sum = 0
for number in numbers {
sum += number
}
return sum
} // 调用处
print(sumOf(5))
print(sumOf(10, 20, 30))

  函数可以嵌套。被嵌套的函数可以访问外侧函数的变量,你可以使用嵌套函数来重构一个太长或者太复杂的函数。

func returnFifteen() -> Int {
var y = 10 func add() {
y += 5
} add()
return y
} // 调用处
print(returnFifteen())

  函数可以作为另一个函数的返回值。

func makeIncrementer() -> (Int -> Int) {
func addOne(number: Int) -> Int {
return 1 + number
}
return addOne
} // 调用处
let increment = makeIncrementer()
print(increment(7))

  函数也可以当做参数传入另一个函数。

func hasAnyMatches(list: Array<Int>, condition: Int -> Bool) -> Bool {
for item in list {
if condition(item) {
return true
}
}
return false
} func lessThanTen(number: Int) -> Bool {
return number < 10
} // 调用处
let numbers = [20, 19, 7, 12]
let result = hasAnyMatches(numbers, condition: lessThanTen)
print("result = \(result)")

  函数实际上是一种特殊的闭包,你可以使用{}来创建一个匿名闭包。使用 in 来分割参数并返回类型。

  闭包完整格式:

{
(参数名: 参数类型) -> 返回类型 in 执行代码 return 返回值
}

  完整格式例子:

let numbers = [20, 19, 7, 12]
let result = hasAnyMatches(numbers, condition: ({
(number: Int) -> Bool in
return number > 10
}))
print("result = \(result)")

  

Swift 语法篇的更多相关文章

  1. ios -- 教你如何轻松学习Swift语法(三) 完结篇

    前言:swift语法基础篇(二)来了,想学习swift的朋友可以拿去参考哦,有兴趣可以相互探讨,共同学习哦.      一.自动引用计数   1.自动引用计数工作机制      1.1 swift和o ...

  2. iOS开发swift语法0基础篇—————(swift技术交流群:361513739)

    iOS开发之swift语法0基础篇:点击打开链接  swift技术交流QQ群361513739

  3. ios -- 教你如何轻松学习Swift语法(二)

    前言:swift语法基础篇(二)来了,想学习swift的朋友可以拿去参考哦,有兴趣可以相互探讨,共同学习哦.      一.可选类型(重点内容)   1.什么是可选类型?        1.1在OC开 ...

  4. Swift入门篇-字符串和字符

    今天主要是介绍一下字符串的用法 ,字符串的语法和object-c语法不太一样,但是思想是一样,就是写法不太一样.如果您对.net和java语法比较熟悉的话,那您几乎没有深压力.如果您对swift 基本 ...

  5. Swift入门篇-Hello World

    提示:如果您使用手机和平板电脑看到这篇文章,您请在WIFI的环境下阅读,里面有很多图片, 会浪费很多流量. 博主语文一直都不好(如有什么错别字,请您在下评论)望您谅解,没有上过什么学的 最近这2天主要 ...

  6. Swift入门篇-swift简介

    潜水博客园很多年,闲来无事,聊一下自己的经历,语文不好(如有什么错别字,请您在下评论)望您谅解,没有上过什么学的 在前期 ios入门篇 -hello Word(1) 文章中介绍我这半年准备写一些ios ...

  7. Swift语法入门

    正文参考: https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/Swift_Progra ...

  8. ios -- 教你如何轻松学习Swift语法(一)

    目前随着公司开发模式的变更,swift也显得越发重要,相对来说,swift语言更加简洁,严谨.但对于我来说,感觉swift细节的处理很繁琐,可能是还没适应的缘故吧.基本每写一句代码,都要对变量的数据类 ...

  9. Swift入门篇-闭包和函数

    今天主要是给大家分享的是 swift中闭包的用法,我个人觉得闭包就是函数的简写方法,如果您函数不是很熟悉请查阅 swift入门篇-函数 1:函数类型 函数类型 var 变量 :(类型)->返回值 ...

随机推荐

  1. ffmpeg-20160828-bin.7z

    ESC 退出 0 进度条开关 1 屏幕原始大小 2 屏幕1/2大小 3 屏幕1/3大小 4 屏幕1/4大小 5 屏幕横向放大 20 像素 6 屏幕横向缩小 20 像素 S 下一帧 [ -2秒 ] +2 ...

  2. .NET 委托

    委托类型定义      C#编译器处理委托时,先自动产生一个派生自System.MulticastDelegate的密封类.这个类与它的基类System.Delegate一起为委托提供必要的基础设施, ...

  3. seajs和requirejs

    一.seajs 1. 使用seajs的一般步骤 a)在主页面引入sea.js b)写模块 c)在主页面使用模块 2.模块的写法 math.js define(function(require, exp ...

  4. 动态选路、RIP协议&&OSPF协议详解

    动态选路.RIP协议&&OSPF协议详解 概念 当相邻路由器之间进行通信,以告知对方每个路由器当前所连接的网络,这时就出现了动态选路.路由器之间必须采用选路协议进行通信,这样的选路协议 ...

  5. JS 中没有按地址(引用)传递,只有按值传递

    很多人,包括我,受书本知识消化不彻底的影响,认为 JS 中参数有两种传递方式:数字.字符串等按值传递:数组.对象等按地址(引用)传递.对此种观点,我们要谨慎. var v1 = [] var v2 = ...

  6. iOS TabeView 头视图和尾视图不滑动的实现

    因项目有需求不能让section中的头尾视图滑动,顾根据网上的一些资料和自己整理的思路,已实现了不滑动效果,上代码,啥都说了,搞了2个小时都是泪.... 1.创建一个tableview _mainTa ...

  7. JSON相关基础知识

    JSON的定义: 一种轻量级的数据交换格式,具有良好的可读和便于快速编写的特性.业内主流技术为其提供了完整的解决方案(有点类似于正则表达式 ,获得了当今大部分语言的支持),从而可以在不同平台间进行数据 ...

  8. 【Java EE 学习 28 上】【oracle学习第二天】【子查询】【集合运算】【几种数据库对象】

    一.子查询 1.为什么要使用子查询:问题不能一步求解或者一个查询不能通过一步查询得到. 2.分类:单行子查询和多行子查询. 3.子查询的本质:一个查询中包含了另外一个或者多个查询. 4.使用子查询的规 ...

  9. 如何设置让基于matplotlib的绘图库正常的显示no-ascii字符(中文字符)

    添加一句: import matplotlib matplotlib.rc('font', family='simhei') 其中family直接指示字体名字就行,比如simhei 注意:如果不能正常 ...

  10. File类基础

    File类的作用: Java的io包中定义了File类,用于对文件或文件夹的管理操作. File类只能够用于表示文件或文件夹的信息(属性)和对该文件或文件夹的删除创建操作 (不能对内容进行访问) 通过 ...