随着对 Swift 的运用愈加娴熟,越来越能感受到 Swift 的魅力。
场景一
列表展示枚举数据,用户点击后保存对应的 code 码。
可以结合元组将所有信息放到枚举中:
enum ShoesQuality {
case new
case flaw
case dressed
case secondHand
var info: (desc: String, code: Int) {
get {
switch self {
case .new:
return ("全新闲置", 100)
case .flaw:
return ("全新瑕疵", 200)
case .dressed:
return ("轻微穿着", 300)
case .secondHand:
return ("二手穿着", 400)
}
}
}
}
使用如下,清晰方便:
let alertController = UIAlertController(title: "选择球鞋成色", message: nil, preferredStyle: .actionSheet)
let array: [ShoesQuality] = [.new, .flaw, .dressed, .secondHand]
array.forEach { (quality) in
let action = UIAlertAction(title: quality.info.desc, style: .default) { (action) in
self.selectedQualityCode = quality.info.code
}
alertController.addAction(action)
}
present(alertController, animated: true, completion: nil)
场景二
用枚举表示支付结果,当支付失败时展示失败原因。
可以使用枚举的关联值进行传值:
/// 支付结果
enum PayResult {
case succeed // 成功
case failed(errorInfo: String?) // 失败
case canceled // 取消
}
使用:
AlipaySDK.defaultService()?.payOrder(result, fromScheme: SCHEME_STRING, callback: { (resultDict) in
// 说明
let desc: String = resultDict!["memo"] as? String ?? ""
// 状态码
if let code: String = resultDict!["resultStatus"] as? String {
switch code {
case "9000": // 订单支付成功
completion(.succeed)
case "4000": // 订单支付失败
completion(.failed(errorInfo: desc))
case "6001": // 用户中途取消
completion(.canceled)
default:
completion(.failed(errorInfo: desc))
}
}
})
场景三
个人中心页面可以是用户的个人中心也可以是订阅号的个人中心,另外:
- 用户的个人中心要区分是本人还是别人,如果是别人,传userID;
- 订阅号传subscribeID。
定义:
enum UserDetailType {
case person(isOwn: Bool, userID: String?) // 个人(是否是自己,userID)
case subscribe(subscribeID: String) // 订阅(订阅号ID)
}
使用:
let type = UserDetailType.person(isOwn: false, userID: "001")
switch type {
case .person(isOwn: true, _):
print("is own")
case .person(isOwn: false, let userID):
print("is other \(userID ?? "")")
case .subscribe(let subscribeID):
print("订阅ID:\(subscribeID)")
}
网友评论