今天想整理一下之前在使用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)