您的位置:首页 > 移动开发 > Swift

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

2017-02-17 12:26 435 查看
今天想整理一下之前在使用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)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  swift 语法 错误点