美文网首页
Swift 初见

Swift 初见

作者: ZYZZZ | 来源:发表于2016-07-21 21:07 被阅读0次

    首先创建swift工程

    创建界面

    选中Command Line Tool, 点击Next

    语言栏选中Swift

    接下来就创建完Swift工程了

    知识点:


    第一部分 基本操作

    1. let 表示常量  var 表示变量

    2. 字符串的操作

    创建一个字符串

    let str = "Hello"

    2. 1 计算字符串长度(和OC类似,不过没有了消息发送[], 全部使用  .  )

    str.characters.count

    str.lengthOfBytesUsingEncoding(NSUTF8StringEncoding)

    2.2 字符串的大小写

    print(str.uppercaseString)

    print(str.lowercaseString)

    2.3 字符串的拼接

    第一种方法:

    print("123\(str)4555")

    第二种方法:

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

    print(str2)

    第三种方法

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

    print(str3)

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

    let str4:NSString = str2 as NSString

    3. 数组 Array (和OC里面的数组可以相互转换)

    3.1  不可变数组

    // 不可变数组

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

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

    let array2 = [String]()

    3.2 可变数组

    3.2.1 创建可变数组

    var mutableArray = [String]()

    3.2.2 添加元素 使用append

    mutableArray.append("Hello")

    mutableArray.append("world")

    3.2.3 Swift中打印使用 print(),并且所有代码后面不需要加;

    print(mutableArray)

    3.2.4 数组移除元素

    mutableArray.removeAtIndex(1)

    3.3 数组遍历

    3.3.1

    // 元素个数.count

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

    for temp in array1 as [String]{

    print(temp)

    }

    3.3.2

    // 元组遍历

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

    {

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

    }


    4. 字典

    4.1 不可变字典

    4.1.1 创建字典

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

    print(dict)

     4.1.2 通过key值访问value值 (和OC一样)

    print(dict["key2"])

    4.2 可变字典

    4.2.1 创建可变字典

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

    4.2.3 (合并)

    for (tempKey, tempValue) in dict{

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

    dict3[tempKey] = tempValue

    }

    print(dict3)

    4.3 字典遍历

    // for - in 遍历

    for (key, value) in dict

    {

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

    }

    5. ? 与 ! 的作用与区别

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

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

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

    常见的错误:

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

    举例:

    var a1:String?

    a1 = "12345";

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

    // 如果a1为nil 赋值234  如果有值 为a1原来的值

    6. 条件语句

    6.1 if 语句

    6.1.1 if语句在Swift中和OC中的区别

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

    // if 没有非零即真的概念

    6.1.2 举例

    let tempValue = 10

    if tempValue > 5 {

    print("tempValue > 5")

    }

    6.2 可选类型的条件分支

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

    let str:String? = "hello"

    if let tempStr = str {

    print(tempStr)

    }

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

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

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

    }

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

    guard let tempStr = str else {

    print("为nil")

    return

    }

    6.3 switch

    6.3.1 Swift 和 OC的区别

    // switch 不局限判断整形,可以使浮点型,也可以是字符串。。。

    // switch 后面的小括号可以省略,大括号不能省略 case后面至少要有一条直行语句!!!并且case后面的大括号可以省略,break可以不写,不造成贯穿 default一定要写,并且只能写在最后

    6.3.2 举例

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

    }

    7. 循环语句

    7.1 第一种

    for var i = 0; i < 5; i += 1 {

    print(i)

    }

    7.2 第二种

    for i in 0 ..< 5 {

    print(i)

    }

    8. 枚举

    8.1 注意点

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

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

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

    8.2 举例

    enum Month:Int {

    case January

    case February

    case March

    case April

    }

    let month:Month = .January

    var month1 = Month.January

    month1 = .February

    8.3 在switch中的应用

    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)

    }

    第二部分 在iOS工程中的操作

    创建步骤 1.


    选中iOS下Application的Single View Application 点击Next

    选择Swift语言 创建工程

    知识点:

    1. 懒加载

    1.1 格式

    /*

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

    code

    return

    }()

    */

    1.2 使用

    view.addSubview(btn)

    1.2 实例

    lazy var btn:UIButton = {

    var temBtn = UIButton(type: .ContactAdd)

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

    temBtn.backgroundColor = UIColor.cyanColor()

    return temBtn

    }()

    2. 闭包

    2.1 格式

    var 闭包变量 ={

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

    代码块

    }

    2.2 种类

    2.2.1 无参无返

    let closure = {

    () -> ()

    in

    print("无参无返")

    }

    closure()

    2.2.2 有参无返

    let closure1 = {

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

    in

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

    }

    closure1(tempStr1 : "hello", tempStr2 : "world")

    2.2.3 无参有返

    let closure2 = {

    () -> String

    in

    print("无参有返")

    return "无参有返"

    }

    print(closure2())

    2.2.4 有参有返

    let closure1 = {

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

    in

    return tempStr2

    }

    print(closure1(tempStr1 : "hello", tempStr2 : "world"))

    3. 函数

    3.1 四种格式

    func a () -> Void {

    print("无参无返")

    }

    func b () -> String {

    return "无参有返"

    }

    // 有参无返

    func c (str : String) -> Void {

    print("\(str)")

    }

    // 有参有返

    func d (str : String) -> String {

    return str

    }

    3.2 函数 和 闭包 的综合使用

    3.2.1 需求 : 输入两个字符串,输入一个闭包(将刚才输入的两个字符串当做参数,并且返回一个拼接好的新的字符串)

    func combineString(str1:String, str2:String, closure:(tempStr1:String, tempStr2:String) -> String){

    // 执行闭包

    let string = closure(tempStr1: str1, tempStr2: str2)

    print(string)

    }

    3.2.2 使用:在viewDidLoad中调用

    combineString("hello", str2: "world") { (tempStr1, tempStr2) -> String in

    return "\(tempStr1) \(tempStr2)"

    }

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

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

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

    return view

    }

    3.2.4 使用

    let view1:UIView = createView(UIColor.redColor(), frame: CGRectMake(0, 0, 375, 667)) { (tempColor, tempFrame) -> UIView in

    let view = UIView()

    view.backgroundColor = tempColor

    view.frame = tempFrame

    return view

    }

    view.addSubview(view1)

    // swift里面不写self,一般只有在闭包内部才会强制要求写self

    4. 异常捕获

    解析Json文件

    let path = NSBundle.mainBundle().pathForResource("iOS04", 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")

    }

    5. 字典录入模型

    5.1 创建模型

    5.1.1 tips

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

    5.1.2 创属性

    var name:String?

    var age:Int = 0

    var gender:String?

    5.1.3 重载初始化方法

    init(dict:[String:AnyObject]) {

    super.init()

    setValuesForKeysWithDictionary(dict)

    }

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

    override init() {

    super.init()

    }

    5.2 字典转模型

    let dict = ["name":"zhangsan","age":12,"gender":"男"]

    let person = Person(dict: dict)

    print(person.name)

    print(person.age)

    print(person.gender)

    6. 单例的创建

    6.1 创建

    创属性

    var name:String?

    6.1.1 第一种

    /*

    static var shareSingleDog:SingleDog = {

    let instance = SingleDog()

    return instance

    }()

    */

    6.1.2 第二种

    static let instance = SingleDog()

    static func shareSingleDog() -> SingleDog{

    return instance

    }

    6.2 使用

    6.2.1 第一种

    let s1 = SingleDog.shareSingleDog

    s1.name = "wangqiang"

    let s2 = SingleDog.shareSingleDog.name

    print(s2)

    6.2.2 第二种

    let s3 = SingleDog.shareSingleDog()

    s3.name = "afbaf"

    let s4 = SingleDog.shareSingleDog()

    print(s4.name)

    分享就到这里,谢谢大家的支持。。。

    相关文章

      网友评论

          本文标题:Swift 初见

          本文链接:https://www.haomeiwen.com/subject/ugwbjttx.html