Swift(一)

//  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不支持隐式转换 FloatDouble都成为不同的类型了


//  元组(类似于结构体 里面有不同类型 但是要先声明 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("10100的数")

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)")


猜你喜欢

转载自blog.csdn.net/a_ss_a/article/details/38496569