// mian函数作为主入口 此函数木有
// 输出自动换行
import Foundation
println("Hello, World!")
println("输出需要加双引号")
// Swift语句后面没有分号,但是可以使用
// 在Swift中,定义一个变量需要使用 var 常量需要使用 let
// 变量或者常量几乎支持所有的Unicode编码的字符,除了数学里面的符号 箭头-> 横线 和系统关键字(连表情都可以)
var 哈哈 = "哈哈"
println(哈哈)
// 定义一个变量 var
var hello = "hello" // 定义一个变量字符串,对空格敏感(= 两边都有或者都没)
hello += hello // 对+=重新定义 字符串也可以进行加载
println(hello)
println("上述结果字符串输出 hello = \(hello)") // \(变量/常量名) 变量或者常量转化成字符串进行输出
// 定义一个常量 let
let helloworld = "hello world"
let helloword: String = "hello world" // 编译器会自动进行类型推断,另外我们也可以显式的制定变量常量的类型 显式制定变量/常量名: 类型名
// 在Swift中几乎对所有的基本类型进行了重写,使用结构体重写的,并且一般首字母大写如Int Float String
var a = 123
var b: Int = 123 // 在Swift中,整型是Int 若系统是64位就是Int64 32位则是Int32
var c: Int8 = 12 // 定义一个变量是8位的整型数
var f = 1234.0 // 默认浮点数是Double类型
var d: Float = 11.0
let result = Double(c) + f // Swift不支持隐式转换 Float和Double都成为不同的类型了
// 元组(类似于结构体 里面有不同类型 但是要先声明 Swift的数组中存放的相同的类型,字典也是,key value分别都必须是同一类型)是关系型数据库的概念 在关系型数据库中 一条记录相当于一个元组,里面可以存放不同类型的数据,可以直接创建使用
// 定义一个元组 (Int, String)类型的
var httpError: (Int, String) = (404, "Not Found")
println("errorCode = \(httpError.0),errorMesaage = \(httpError.1)") // 可以通过下标取出元组里的数据
var httpErrorA: (errorCode: Int, errorMessage: String) = (errorCode: 404, errorMessage: "Not Found") // 通过标示(名称: 类型)寻找元素,并通过元组.名称 查找数据
println("errorCode = \(httpErrorA.errorCode),errorMessage = \(httpErrorA.errorMessage)")
// 数组Array
// 创建一个空的数组
var somebodys = Int[]() // Xcode6_beta3 之后更改为[Int]() 不能更改数组的元素了
println("数组里元素的个数 = \(somebodys.count)")
// 创建一个可变的数组
var nameArrayA = ["辉哥","亚姐","云姐"] // 当数组元素不同时 直接转化成NSArray 对其进行Swift的操作会报错
var nameArrayB: String[] = ["辉哥","亚姐","云姐"] // 字符串数组,Swift进行类型推断
// 在Swift中 数组里面只能存放同一类型的数据 并且可以对这些数据直接进行增加删除操作
println("nameArrayA = \(nameArrayA)")
// 向数组中添加一个数据 append
nameArrayA.append("石头")
println("nameArrayA = \(nameArrayA)")
// 移除数组中指定位置的元素 removeAtIndex
nameArrayA.removeAtIndex(0) // 点调出来方法
println("nameArrayA = \(nameArrayA)")
nameArrayA.removeLast()
println("nameArrayA = \(nameArrayA)")
// 更改数组中某个位置的元素 nameArrayA[0] = "CTO"赋值操作
nameArrayA[0] = "CTO"
println("nameArrayA = \(nameArrayA)")
// 不可变的数组用let来声明 (可以进行更改 不能添加删除)
let nameArrayC: String[] = ["CEO", "CTO"]
nameArrayC[0] = "更改"
println("nameArrayC = \(nameArrayC)")
// 对数组元素进行遍历 使用for in
for name in nameArrayB{
println("name = \(name)")
}
// 想接收数组中数据及数据位置 可以使用元组
for(index, name) in enumerate(nameArrayB){
println("index = \(index),name = \(name)")
}
// 字典
// Swift中字典(Dictionary)中所有的key必须同一类型 value必须是同一类型 若不同会变成NSDictionary
// 创建一个空的字典
var dictionaryStudent = Dictionary<String, Float>()
// 创建一个可变的字典
var person = ["name":"辉哥", "sex":"男"]
var personA: Dictionary<String, String> = ["name":"辉哥", "sex":"男"] // 类型推断
// 给字典添加一个键值
person["habit"] = "足球" // 如果该key存在会被替换掉key对应的值
println("person = \(person)")
person["name"] = "波哥"
println("person = \(person)") // 字典的打印是无序的
// 更新字典里某个key对应的数据
let oldValue = person.updateValue("崔哥",forKey:"name")
println("有旧数据的返回值的方法得到的person = \(person)")
println("oldValue = \(oldValue)") // 返回的是旧的数据
// 对字典进行遍历
for (key, value) in person{
println("对字典进行遍历key = \(key),value = \(value)")
}
let personB = ["name":"不可变字典"] // 不可变字典和不可变数组不同的是 里面的元素不可以进行替换
println("person = \(person)")
// 控制语句 if if...else while do...while switch case
var number = 3
var isTrue: Bool = true // Bool true false
if isTrue{ // 判断条件必须是Bool类型的 (不用加小括号了)
println("Bool")
}
for var i = 0; i < 100; i++ {
println("i = \(i)")
}
for j in 1..3 { // ..包括左边的 不包括右边的 Xcode6_beta3以后改成了 ..<
println("j = \(j)")
}
for j in 1...3 { // ...包括左边也包括右边
println("j = \(j)")
}
// Switch case 语句 进行了很大的加强
var h = 1
switch h { // 默认不加break 也可以自己加
case 1:
println("h = 1")
fallthrough // 强制执行下一条语句 无论条件是否满足
case 11:
println("h = 11")
fallthrough
default:
println("h = 其他数字")
}
// case可以是一个范围
switch h {
case 1...20: // case范围交叉 执行第一个满足条件的case语句
println("个位数")
case 1...100:
println("十位数")
default:
println("其他")
}
// 进行双重判定
switch h {
case 1..20 where h == 10: // where是双重判定
println("f == 10")
case 10..100:
println("是10到100的数")
default:
println("f是其他数字")
}
// 判断一个点在坐标系的什么位置
var point = (0, 4)
switch point {
case (0, 0):
println("原点")
case (_, 0): // 忽略元组中对应位置的值用 _
println("X轴上")
case(0, let y): // 元组对应位置的值
println("Y轴上 y = \(y)")
default:
println("象限内")
}
// optionals 可选变量
// nil 指针置空 Nil 空类 NULL 0 空对象 NSNull 返回值为空 Swift中只有nil表示空
// 在类型名的后面加 ?表示这是可选变量 值可能为空
var value: Int? //? 表示一个可选变量 值可能为nil
let numberStr = "1234"
value = numberStr.toInt()
println("value = \(value)")
if value { // 判断条件是可选变量是不是nil Bool值类型
println("value 有值")
var acceptValue: Int = value! // !把里面的值取出来用 解包(必须保证里面有值,否则会崩溃)
println("acceptValue = \(acceptValue)")
}else{
println("value nil")
}
// 解包
var acceptValue: Int = value! // !把里面的值取出来用 解包(必须保证里面有值,否则会崩溃)
println("acceptValue = \(acceptValue)")