Swift(上) 常量, 变量, 数据类型, 循环, 选择结构 简单函数
本篇内容是在XCode的Playground下编写的
那么什么是Playground呢?
提到Playground我们就不得不提Swift这个最近苹果公司力推的语言, Swift是苹果公司在WWDC2014上发布的全新开发语言。从演示视频及随后在appstore上线的标准文档看来,语法内容混合了OC,JS,Python,语法简单,使用方便,并可与OC混合使用。
Xcode 6 对 Swift 有着全面深入的支持。你可以利用 100% Swift 代码创建全新的 app,或者将新的 Swift 代码或框架添加到现有的 app 中,还可查看用 Swift 和/或 Objective-C 语言编写的文档。“跳转至定义”或“快速打开”等所有常见的可供性同样适用于 Swift,甚至还可用 Swift 语法显示 Objective-C 标头定义。
尽管 Swift 编译为高度优化的原生代码,但 Playground 可以实现脚本语言的交互式体验。键入一行代码,结果便会立即显现。如果你的代码运行一个循环,可将该行代码添加到时间轴辅助编辑器中,观察其进度。以图形方式显示变量,绘制视图时检查每一个步骤,或者观看 SpriteKit 动画场景。在 Playground 中优化好代码后,即可将它移到你的项目中。Playground 文档包括你可以在 Playground 中打开的教程,其中包含可供试验的交互式工作表。
但是, Playground现在感觉还是一个玩具, 玩玩可以, 但是真正的去用它编程 那就不怎么靠谱了
// Playground - noun: a place where people can play
import UIKit
var str = "Hello, playground"
// 输出语句
// 我们学习每一门语言的第一条语句HelloWorld!
println("hello, world")
// 定义常量
// 可以不写数据类型, 系统会根据其赋值自动推荐其类型
//let a = 10
let a : Int = 10
println("\(a)")
println(a)
// 定义变量
var b = 11.0
//var b : Float = 11.0
// Swift不支持隐式转换 必须显示转换类型
var c = (Double)(a) + b
// Swift命名几乎支持所有Unicode编码
// 注意以下几点:
// 1. 不能使用系统保留字, 如果一定要使用保留字, 可加`保留字`命名
// 2. 不能以数字开头
// 3. 不能使用数字符号命名
// 4. 不能使用横线箭头命名
let `Int` = 1
var 哈哈 = "呵呵"
println(哈哈)
var 🌍 = "💗"
println(🌍)
var short : Int8 = 4
var xx : Int16 = 66
// 拼接字符串
🌍 += 哈哈
// 元组 数据库里的概念, 相当于一条数据
var person : (String, Int) = ("我", 23)
// 可以通过下标取值
person.0
person.1
// person1相当于表名, name, age相当于列名, 对应着数据库中的一条数据
var person1 : (name : String, age : Int) = (name : "我", age : 23)
person1.name
// 元组分解
var (name, age) = person1
name
age
// 数组
// 可变用 var 修饰
// 不可变用 let 修饰
// 定义一个空数组
var emptyArr = [String]()
// 数组元素个数
emptyArr.count
// 必须是同一类型数据, 否则将自动转换为OC里的数组
var arr = ["dt", "xg", "lw"]
// 系统会自动推断为下面这种形式
//var arr : [String] = ["dt", "xg", "lw"]
// 数组里添加一条元素
arr.append("xq")
// 数组中插入一条元素
arr.insert("lb", atIndex: 1)
// 修改数组中下标对应的元素
arr[0] = "hdt"
println(arr)
// 删除数组中某条数据
arr.removeAtIndex(0)
println(arr)
// 遍历数组
for name in arr {
name
}
// 遍历数组时获取元素对应的下标
for (index, name) in enumerate(arr){
index
name
}
// 数组中多个元素
// 0..<2 表示一个范围, 0~2左闭又开区间
// 0...2 表示0~2闭区间
arr[0..<2]
arr[0...2]
// 创建一个空字典
// key必须是同一个类型, value 也必须是同一类型的, key和value可以是不同类型的
var emptyDic = Dictionary<String, Int>()
var dic = ["name":"sx", "other":"zx"]
// 系统会自动推断为下面这种形式
//var dic : Dictionary<String, String> = ["name":"sx", "other":"zx"]
// 在字典中添加键值对
// 如果key值存在则为修改键值对操作
dic["origin"] = "lsx"
println(dic)
dic.updateValue("wg", forKey: "other")
println(dic)
// 删除字典中的键值对
dic.removeValueForKey("name")
dic["other"] = nil
println(dic)
// 遍历字典
for (key, value) in dic{
key
value
}
// 通过下标取字典中的键值对
var index = dic.indexForKey("origin")
dic[index!]
// 可选变量 optional
// 表示此变量的值可能为空
var canChoose : Int?
// 应用于不确定能不能有值的情景, 例如下面情况 如果"1234"为有值, "1234f"则为nil 如果不是可选变量默认都有值
var newStr : String = "1234f"
// toInt表示转化成Int类型
canChoose = newStr.toInt()
// if语句 要求判断条件必须为Bool值 用true 或 false
// 如何定义一个Bool值
var isTrue : Bool = true
if isTrue {
println("true, \(newStr)")
} else {
println("false")
}
if canChoose != nil {
println("true")
} else {
println("false")
}
// switch
// Swift中对switch进行了很大的修改, 我们case选项可以为字符串, 默认不需要写break, 如果想强制执行下一个case, 需要添加 fallthrough关键字
var someone = "xm"
switch someone {
case "xm" :
println("xm")
fallthrough
case "xxs" :
println("xxs")
default :
println("default")
}
// switch 的case 可以为一个范围, 甚至可以多条件选择 用 where 关键字
var score : Int = 45
switch score {
case 0..<100 where score == 88:
println("这是一个小于100的数")
case 100...200 :
println("这是一个100到200之间的数")
default :
println("default")
}
// switch的case 还可以为一个元组, 元组中的"_"表示忽略该值
var point = (0, 4)
switch point {
case (_, 0):
println("在x轴上")
case (0, _):
println("在y轴上")
default:
println("default")
}
// 可以通过取范围遍历
var i : Int
for i in 0..<10 {
i
}
// for 循环
for var j = 0; j < 10; j++ {
j
}
// do while
var k = 10
do {
k++
} while k < 20
// while循环
while k < 100 {
k++
}
// 定义函数时 需要加一个 func关键字 sayHello 为函数名 括号里的为参数(参数名: 参数类型) -> 指的是返回值 {}大括号里面的表示函数体
func sayHello(name:String, number:Int)->String {
return name
}
sayHello("dt", 99)
// 我们可以给函数参数加一个标签 (外部参数) 用于提示我们需要输入一个什么样的参数 或者说是干什么用的
func sayGoodBye(peronName name:String, number:Int)->String {
return name+"\(number)"
}
sayGoodBye(peronName: "xg", 99)