Swift基础知识,快速掌握

swift的语法确实高端,用习惯了编程特别顺手。

swift中的变量分为两类,变量(var)和常量(let),常量声明时必须有一个初值,变量声明时不必有初值,但要指定类型。

1.Int 和 Float

let a:Int = 1

let b:Float = 1.1

let var

let str = "hello"

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

str.lengthOfBytesUsingEncoding(NSUTF8StringEncoding)

1.2大小写

str.uppercaseString 

str.lowercaseString

let str2 = String(format: "%02d:%03d", 1,2)

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

str2.substringToIndex(<index: Index) // 字符串的拼接,剪切等

字符串的其他操作全部转化为NSString再去操作

1.3转换

let str4:NSString = str2 as NSString  //str4是str2转化为NSString的值

2数组 Array

2.1不可变数组

let array1 = ["A","2","3","4"]

let array2:Array = ["A","2","3","4"]

let array3:[String] = ["A","2","3","4"]

initWith/init在swift里面全部转化成 ( )

let array4 = [String]()  // 指定是String类型数组

元素个数 .count 来访问

数组遍历 for-in(要明确指出数组的)

for temp in array3 as [String]{

print(temp.characters.count)

print(temp)

}

元组遍历  **针对下标的时候 推荐**

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

{

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

}

2.2可变数组

var mutableArray = [String]()

mutableArray.append("hello")

mutableArray.append("world")

mutableArray.append(23)

mutableArray.removeAll()

mutableArray.removeAll(keepCapacity: true)

mutableArray.removeFirst(0)

print(mutableArray)

3.字典  Dictionary

3.1不可变字典

let dict = ["key1":"value1", "key2":"value2", "key3":"value3"]

print(dict)

通过key值访问value值

print(dict["key1"])

字典遍历不用在dict后面加.enumerate()

for (key,value) in dict

{

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

}

3.2可变字典

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

3.3合并字典

for (tempKey,tempValue) in dict{

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

dict3[tempKey] = tempValue

}

print(dict3)

4 .可选类型

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

Optional包围的就是一个可选类型 (打印出来有Optional)

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

unexpectedly found nil while unwrapping an Optional value 出现这个错误的时候就是对一个空的可选类型进行强制解包 ,不能对空的可选类型进行强制解包!

(a1 ?? "234") 对可选类型进行判断,如果可选类型值为nil,则给它一个默认值("23456")

var a1:String?

a1 = "123"

print(a1)

print(a1!)

print(a1!.characters.count)

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

5.条件分支

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

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

let tempValue = 10

if tempValue > 5{

print("tempValue > 5")

}

可选类型的条件分支

let str:String? = "hello"

(1) if-let是对可选类型的判断,如果可选类型为nil,则不执行代码块。如果不为空则用tempStr来接受此刻这个可选类型的解包后的值

if let tempStr = str{

print(tempStr)

}

(2) if-let-where 跟if-let相似,where是对前面定义的这个局部变量再做一层判断

if let tempStr = str where tempStr.characters.count > 2 {

print("tempStr.length = \(tempStr.characters.count)")

}

(3) guard-let-else (守护)

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

guard let tempStr = str else {

code

return

}

tempStr....

6.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("unknow")

}

该写法在swift2.2的时候被废弃掉了

for (var i = 0 ; i < 5; i++){}

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

}

7.枚举(枚举值可以关联浮点,字符串等,没有默认的关联值)

关联如果是Int,会默认的递增上去;如果不是Int类型,必须每个枚举值都关联上对应的值

enum Month:Float {

case January = 11.2

case February = 12.2

case March = 13.6

case April = 14.2

case May = 15.4

case June = 17.6

}

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

let month = Month.January

let month2:Month = Month.January // let month2:Month = .January

var month1 = Month.January

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)

default :

print("hashValue = \(month.hashValue),rawValue = \(month.rawValue)")

print("noValue")

}

8.懒加载

* lazy var 变量名:变量类型 = {

*      code

*      return

*  }( )

lazy var btn:UIButton = {

var tempBtn = UIButton(type: UIButtonType.ContactAdd)

tempBtn.frame = CGRectMake(90, 100, 50, 50)

tempBtn.backgroundColor = UIColor.cyanColor()

return tempBtn

}()

9.异常捕获

let path = NSBundle.mainBundle().pathForResource("iOS", ofType: "json")

let data:NSData = NSData(contentsOfFile: path!)!

do{

let rootArray = try NSJSONSerialization.JSONObjectWithData(data, options: .MutableContainers) as! [[String:String]]

print(rootArray)

}catch{

// 异常捕获,序列化出错的时候就自动来到这里

print("error")

}

10.闭包

{

(参数名:参数类型) -> 返回值类型

in

code,执行代码

}

无参无返

let closure = {

()->()  // ()->void  // ()  3种

in

print("无参无返")

}

closure()

有参无返

let closure1 = {

(str:String,str1:String)->Void

in

print("有参无返\(str),\(str1)")

}

closure1("hello","world")

无参有返

let closure2 = {

()->String

in

print("无参有返")

return "无参有返"

}

print(closure2())

有参有返

let closure3 = {

(str:String,str1:String)->String

in

print("有参有返\(str),\(str1)")

return str+str1

}

print(closure3("1","2"))

练习

定义一个方法 (输入参数color,frame,closure(是将刚才的color,frame当做参数,返回一个UIView),返回一个UIView)

func creatUIView(color:UIColor,frame:CGRect,closure:(tempColor:UIColor,tempFrame:CGRect)->UIView)->UIView{

let view:UIView = closure(tempColor: color, tempFrame: frame)

return view

}

调用函数:

let view = creatUIView(UIColor.redColor(), frame: CGRectMake(100, 100, 100, 100)) { (color, frame) -> UIView in

let tempView = UIView(frame: frame)

tempView.backgroundColor = color

return tempView

}

view.addSubview(view)

11.函数

func 方法名(参数列表)-> 返回值类型{

code

}

无参无返

func func1()->Void{

print("无参无返")

}

有参无返

func func2(str:String)->Void{

print("\(str)")

}

有参有返

func func3(str:String)->String{

return str+"有参有返"

}

无参有返

func func4()->String{

return "无参有返"

}

12.字典转模型

class Person: NSObject {

字典转模型,模型中如果有基本数据类型的话,基本数据类型不可以为可选类型,否则在KVC赋值中会找不到对应的key值.如果为可选类型的话应该给初始值

var name:String?

var age:Int = 0

var gender:String?

字典转模型

init(dict:[String:AnyObject]) {

super.init()

setValuesForKeysWithDictionary(dict)

}

this class is not key value coding-compliant for the key age.'出现这个错误一般都是字典转模型的时候出错

如果自定义了初始化方法并且没有实现系统默认的初始化方法,那么外界访问不到该类的默认初始化方法,想要访问的话必须手动实现

override init() {

super.init()

}}

13.创建单例

class SingleDog: NSObject {

var name:String?

单例第一种写法

    static var shareSingleDog:SingleDog = {

       let instance = SingleDog()

        return instance

    }()

单例第二种写法

static let instance = SingleDog()

static func shareSingleDog()->SingleDog{

return instance

}

}

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

推荐阅读更多精彩内容

  • 虽然Swift这门语言还很年轻,但是不可否认的是Swift很强大,也很便捷,但是习惯于OC编程之后再去写swift...
    One苹果OneDay阅读 677评论 0 2
  • SwiftDay011.MySwiftimport UIKitprintln("Hello Swift!")var...
    smile丽语阅读 3,826评论 0 6
  • 首先创建swift工程 选中Command Line Tool, 点击Next 语言栏选中Swift 接下来就创建...
    ZYZZZ阅读 370评论 0 3
  • swift基本使用 swift语句后面没有分号,不过就算不小心加了分号也不会报错,但是为了语法的规范不能加分号 引...
    黄泉殇阅读 412评论 0 0
  • Swift 介绍 简介 Swift 语言由苹果公司在 2014 年推出,用来撰写 OS X 和 iOS 应用程序 ...
    大L君阅读 3,168评论 3 25