Swift基本知识

一、数据类型

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为关联的值
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,378评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,356评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,702评论 0 342
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,259评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,263评论 5 371
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,036评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,349评论 3 400
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,979评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,469评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,938评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,059评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,703评论 4 323
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,257评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,262评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,485评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,501评论 2 354
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,792评论 2 345

推荐阅读更多精彩内容