Swift基本知识

2016-07-21  本文已影响168人  蓝蓝的白云

一、数据类型

1.基本数据类型

let a:Int = 12 //声明整形常量a  , let 代表常量,Int代表整形

var b:Float = 10.2 //声明浮点型变量b,var代表变量,Float代表浮点型,初值为10.2

let str = "helloWorld"

str.characters.count //计算字符串长度

str.lengthOfBytesUsingEncoding(NSUTF8StringEncoding) //计算字符串长度

注:字符串相等判断: "==",字符串拼接判断:“+”

str.uppercaseString  // 首字母大写

 str.lowercaseString // 首字母小写

// 格式化字符串(两种方法)

let str2 = String(format: "%02d:%02d", 1,2);  //方法1

let str3 = String(format: "%02d-%02d", arguments: [1,2]) // 方法2

2.数组 Array (跟OC里面的数组一样可以相互转换)

a.不可变数组

let array1 = ["A", "2", "3", "4"] //定义不可变数组array1

// initWith/init在swift里面全部转换为(),代表初始化

let array2 = [String]() //初始化定义不可变数组array2

// 访问数组元素个数 .count

// 数组遍历 for-in(明确指出数组的类型)

for temp in array1 as [String]{

print(temp.characters.count)

}

// 元组遍历

for(index, value) in array1.enumerate()

{

print("index = \(index), value = \(value)")   // \(参数)为占位符

}

// b.可变数组

var mutableArray = [String]() // 定义可变数组(类型为NSString)

mutableArray.append("hello")  // 添加元素

//mutableArray.append(23) //类型不匹配

mutableArray.removeAll() //移除数组元素

// mutableArray.removeFirst(<#T##n: Int##Int#>) 从第一个元素开始移除, 直到n结束

3. 字典 Dictionary

let dict = ["key1":"value1", "key2":"value2", "key3":"value3"] //定义不可变字典

// 通过key值访问value

print(dict["key1"])

// for-in遍历

for (key,value) in dict  // 遍历字典里面所有的key和value

{

print("key = \(key), value = \(value)")

}

var dict3 = ["key":"value"]

for (tempkey, tempValue) in dict{

// 如果key存在, 则是一个更新键值对操作, 否则是一个增加键值对操作

dict3[tempkey] = tempValue

}

4. ? 与 !的应用

// 如果一个值可能为nil, 那么这个值就是可选类型,用?标识

// optional包围的就是一个可选类型

// 可选类型不能直接使用, 必须进行强制解包,!强制解包, 对nil强制解包会造成崩溃

var a1:String?

a1 = "12345"

// !!!!!unexpectedly found nil while unwrapping an Optional value 对一个空的可选类型进行强制解包

// (a1 ?? "234")  对一个空的可选类型进行强制解包, 如果可选类型为nil, 则给他一个默认值

print((a1 ?? "234").characters.count)

二. 分支语句

// if 条件语句()可以省略, {}不能省略

// if 没有非0即真的概念, 只有true 和 false 的两种情况

let tempValue  = 10
if tempValue > 5{
print("tempValue > 5")
}

1. 可选类型的条件分支

let str:String? = "hello"

a.if-let

对可选类型的判断, 如果可选类型为空, 则不执行代码块, 如果不为空, 则用tempStr来接收此刻这个可选类型解包后的值

// 只针对可选类型 ?
if let  tempStr = str{
print(tempStr)
}
if str !=nil // 安全处理,防止str为空导致crash
{   str!  }

b.if-let-where

跟if-let 相似, where是对前面定义的这个局部变量在做一层判断
if let tempStr = str where tempStr.characters.count > 2{
print("tempStr.length = \(tempStr.characters.count)")
}

c. guard-let-else

如果可选类型str为nil,则执行code代码块, 最后一定要return, 如果不为nil, 则强制解包后的值赋值给tempStr, 这样在{}外面就可以使用tempStr
guard let tempStr = str else
{
//code
return
}
tempStr...

2. switch分支语句

switch 不局限判断整形, 可以为浮点型, 也可以是字符串...
switch 判断后面的小括号可以省略, 大括号不能省略
case 后面至少要有一条执行语句!!!!并且case后面的大括号可以省略, break可以不写, 不会造成贯穿
default一定要写, 并且只能写在最后
let f = 3.2
switch f
{
case 3.0:
print("===3.0")
case 3.1:
print("===3.1")
case 3.2:
print("3.2")
default:
print("know")
}

3. for...in 遍历

for (var i = 0; i < 5; i++){  swift2.2的时候被废弃
}

for var i = 0;i < 5; i += 1{
    print(i)
}
for i in 0..<5 { // 0..<5-----[0,5)  0...5-----[0,5]
print("i = \(i)")
}

三. 枚举

a.枚举值可以关联浮点, 字符串, 没有默认的关联值,关联如果是Int, 会默认的递增上去, 如果不是Int类型, 必须每个枚举值都关联上

enum Month:CGFloat{ // 定义枚举
case January = 10.1
case February = 10.2
case March = 10.3
case April = 10.4
}

b.如果明确指出一个变量/常量是属于哪种枚举类型的话, 可以直接.枚举值, 否则就 枚举类型.枚举值

/*
let month:Month = .February  // 定义month枚举常量,值为February
var month1 = Month.January //定义month1枚举变量
month1 = .February
*/
switch month{
case .January:
print("hashValue = \(month.hashValue), rawValue = \(month.rawValue)")
print(month)
case .February:
print("hashValue = \(month.hashValue), rawValue = \(month.rawValue)")
print(month)
case .March:
print("hashValue = \(month.hashValue), rawValue = \(month.rawValue)")
print(month)
case .April:
print("hashValue = \(month.hashValue), rawValue = \(month.rawValue)")
print(month)
}
注:hashValue 的值为位置, rawValue为关联的值
上一篇下一篇

猜你喜欢

热点阅读