Swift 中的枚举可以说好用到让我惊讶. 但是我可以让它更易用.
比如 用它来封装 应用 微信的 Tab 栏枚举,如下:
enum AppTab{
case wechat,contacts,discover,me
}
到这里已经比用整型常量好很多了. 好了,现在你想将 UITabBarItem 中的构造封装在里面.
title
属性,如下:extension AppTab{
var title:String{
switch self {
case .wechat: return "微信"
case .contacts: return "通讯录"
case .discover: return "发现"
case .me: return "我"
}
}
}
然后.就可以直接使用 .title
就可以访问了. 避免了 使用字典保存映射的麻烦. 写法,修改也简单.
if tab == .wechat
嗯, Swift 中可以直接写 .wechat
这样的枚举值真方便.
但是你也可以这样. 添加一个 Bool 类型的 Computed Property.extension AppTab{
var isWechat:Bool{ return self == .wechat }
}
然后你想为所有的枚举值都加上这样的 Computed Property. 你复制粘贴然后修改.
extension AppTab{
static let allCases:[ AppTab] = [.wechat, .contacts, .discover, .me]
}
so far, so good. 那我可以帮到你什么呢? 我可以帮你少写代码. 怎么帮?
如下.
AppTab
wechat:微信
contacts: 通讯录
discover:发现
me:我
选中, 右键, 选择 "Services|generate_enum" 然后如下代码就自动生成了:
//AppTab
//wechat:微信
//contacts: 通讯录
//discover:发现
//me:我
enum AppTab {
case wechat, contacts,discover,me
var isWechat:Bool{ return self == .wechat }
var isContacts:Bool{ return self == .contacts }
var isDiscover:Bool{ return self == .discover }
var isMe:Bool{ return self == .me }
var title:String{
switch self{
case .wechat:return "微信"
case .contacts:return " 通讯录"
case .discover:return "发现"
case .me:return "我"
}
}
static let allCases:[AppTab] = [.wechat,.contacts,.discover,.me]
}
怎么样? 来试试吧! 当然还有其他选项可以使用. 如果你有其他需要麻烦告诉我. 当然有 PR 最好了.
最后来张动图感受一下:
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.