- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我最近在使用 ENUMS 时遇到了一些不正常的问题,想知道将外部类的函数作为 ENUM 函数中的值调用是否安全/是否允许 (不是原始的值)。 下面是一个示例:
enum pageData: Int {
case page1
case page2
case page3
static let pageGroup = [page1, page2, page3]
func initPage(caption: String = "") -> myCustomType {
var mctData: myCustomType!
switch self {
case .page1:
let text = (caption.isEmpty) ? extClass.getCaptionFunc("page1") : caption
mctData = myCustomType(param1: text, param2: extClass.formatDateFunc("2018/12/01"))
case .page2:
let text = (caption.isEmpty) ? extClass.getCaptionFunc("page2") : caption
mctData = myCustomType(param1: text, param2: extClass.formatDateFunc("2018/12/03"))
default: ()
}
return mctData
}
}
在 ENUM SWITCH 情况 中调用了两个单独的示例函数(extClass.getCaptionFunc() & extClass.formatDateFunc()) strong> 填充将由 ENUM 函数 initPage() 返回的所需数据。
问:这是安全/允许的设计吗?目前的测试尚无定论,当枚举和 switch case 变得太大时应用会崩溃,但在较小的占用空间上运行良好。
感谢您的任何反馈。
最佳答案
问:安全吗?
虽然此代码在大多数情况下看起来都有效,但肯定有一些改进的机会。
如果这是一次代码审查,我会说使用隐式展开的 myCustomType!
是一个危险的选择。您的函数需要返回一个 myCustomType
,因此在任何情况下它都应该这样做,而隐式展开的变量弊大于利。
此外,我认为这里没有必要使用 default
案例。让 swift 进行详尽检查,以便您知道何时忘记实现案例。使用 default
破坏了这一点。使用您编写的内容,调用 pageData.page3.initPage()
将使程序崩溃,因为没有 .page3
的情况,因此隐式展开的 mctData
将为零。
如果您绝对需要“关闭”编译器,您可以提供 fatalError()
作为您还不能实际实现的任何情况的实现。这在我的书中会更可取。
关于静态函数:虽然这样做没有技术问题,但它不是我的首选解决方案。很难确定,因为我不知道该代码的作用,但我可能会从 pageData
类中的该实现作为计算属性开始,例如:
var defaultCaption: String {
switch self {
case .page1: // something, something "page1"
// etc. for the rest of the cases
}
}
最后,所有类名和常量名都不是标题大小写(如 PageData,
MyCustomType`)这一事实使得您在此处提供的代码非常不寻常并且有点难以阅读。我建议看一下语言 API design guidelines如果你还没有。遵循社区标准将使您的代码对于那些还不熟悉它的人来说更容易理解。包括 Stack Overflow 上的人 :)
关于swift - 从 ENUM 函数中调用外部类函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53621980/
我是一名优秀的程序员,十分优秀!