[iOS]-Swift使用易错点整理(持续更新)

11 篇文章 0 订阅

今天想整理一下之前在使用Swift3.0的过程中踩过的坑,记录下来以便以后翻阅起来更方便。
1、方法签名
Swift3.0 方法的签名写法,类似OC的选择器
#selector(函数名(参数名:…))
多个参数的情况:后面一直跟着写出。

demo:

mport UIKit

class CallFunctioin: NSObject {

    var tap1:UITapGestureRecognizer?
    var tap2:UISwipeGestureRecognizer?

    func callFun() {

        tap1 = UITapGestureRecognizer(target: self,
                                      action: #selector(fun1(str:)))
        tap2 = UISwipeGestureRecognizer(target: self,
                                        action: #selector(fun2(str1:str2:)))
    }

    func fun1(str:String) -> Void {
        print("fun1")
    }

    func fun2(str1:String, str2:String) -> Void {
        print("fun2")
    }

2、类型转换:
// 判断一个对象是否是某个类型,OC:isKindOfClass Swift:is
// 判断是否可以类型转换:OC:isMemberOfClass Swift:as? 和 as!
// 可选形式 as? 返回一个你试图下转成的类型的可选值(optional value)。// 强制形式 as 把试图向下转型和强制解包(force-unwraps),两个操作同时进行
// 看下面的栗子:parseBaseData

func parseBaseData(allData:[[String:AnyObject]]) {
        // 基本账户临时字典
        var tempBaseDic = [String:AnyObject]()

        // 绑卡列表临时数组
        var tempBankArr = [[String:AnyObject]]()

        if allData.count > 0 {
            for index in 0..<allData.count {
                var passdic = [String:AnyObject]()
                // 获取下挂类型
                let recTypeDic = allData[index]
                let recType = recTypeDic["recType"] as? String
                if !(recType?.isEmpty)! {
                    if recType == "03" {
                        // 基本账户
                        tempBaseDic = allData[index]
                        self.base_list?.add(tempBaseDic)
                    } else if recType == "01" {
                        // 绑卡列表
                        passdic["image"] = "yinhang_kaban" as AnyObject?

                        // 根据银行名称取银行名称和Logo
                        let bankNameDic = self.list?[index]
                        let bankName = bankNameDic?["bankName"] as? String


                        var bankNameLogo:String = ""
                        bankNameLogo = JDUtils.getIconName(byBankName: bankName!)
                        passdic["bankLogo"] = bankNameLogo as AnyObject?


                        // 银行名称
                        passdic["bankName"] = bankName as AnyObject?

                        // 卡类别
                        passdic["type"] = "index_05" as AnyObject?

                        // 卡号
                        let cardNumber = allData[index]["accountNo"]
                        passdic["cardNo"] = cardNumber

                        // 银行卡类别:储蓄卡或信用卡
                        let b = allData[index]["accountType"]
                        var accountType:String = ""
                        if (b != nil) {
                            accountType = (allData[index]["accountType"] as? String)!
                        } else {
                            accountType = "10"
                        }
                        passdic["accountType"] = accountType as AnyObject?


                        // 余额
                        var availBalance = "¥0.00元"
                        let avi = allData[index]["availBalance"]
                        if (avi != nil) {
                            var tempAvailBalance = allData[index]["availBalance"] as? String
                            if tempAvailBalance == nil {
                                tempAvailBalance = "0.00"
                            }
                            availBalance = "¥" + tempAvailBalance! + "元"
                        }
                        passdic["availBalance"] = availBalance as AnyObject?
                        // 添加到绑卡列表临时数组
                        tempBankArr.append(passdic)
                    }
                }
            }
        }

3、异常及捕获
看下面demo

// 捕获和处理错误
        let fileManager = FileManager.default
        let url = NSURL.fileURL(withPath: "/path/to/file")


        // 直接这样写报错:call can throw,but it is not marked with 'try' and the error is not handled
//        fileManager.removeItem(at: url)

        // 可以这样写:使用do catch捕获异常
        do {
           try fileManager.removeItem(at: url)

        } catch let error as NSError {
            print("error:\(error.domain)")
        }

===================20160316补充=================
4、获取对象的类型
/* 获取对象的类型: type(of:)
* 注意:dynamicType已经废弃
* 相当于OC中的class 实例方法 []
* object = [[SomeClass alloc] init];
* [object class]; 对象名:class 获取object的类型
*/

let string = 1
let name = type(of: string)
print(name)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值