我最近对Extensions
上瘾了。我发现一个巨大的 PITA 的一件事是计算我在哪里隐藏了一个有用的方法,比如 Array
、NSManagedObject
等。
我所做的是将我的扩展放在一个名为 CustomExtensions
的 NSObject
类文件中,然后我按字母顺序在其中列出类扩展。
它有效,但我想看看它是否符合最佳实践。如果没有,跟踪Extensions
的最佳方法是什么?
这是我所做的:
class CustomExtensions: NSObject {
/*
Useful extensions, nothing else here
*/
}
// Example extension
extension Int {
func formatAsTimeString() -> String {
let seconds = self % 60
let minutes = (self / 60) % 60
let hours = self / 3600
let stringHours = hours > 9 ? String(hours) : "0" + String(hours)
let stringMinutes = minutes > 9 ? String(minutes) : "0" + String(minutes)
let stringSeconds = seconds > 9 ? String(seconds) : "0" + String(seconds)
if hours > 0 {
return "\(stringHours):\(stringMinutes):\(stringSeconds)"
}
else {
return "\(stringMinutes):\(stringSeconds)"
}
}
}
// More extensions below
最佳答案
我认为围绕这个问题的“最佳实践”还没有找到。也就是说,这是 MHO:
最终,我对待这些扩展的方式与我在 C 中处理全局函数的方式相同。毕竟,它们基本上就是这样。具有特殊语法的全局函数...
如果扩展只在一个文件中使用,那么我会把扩展放在同一个文件中。当我完成时,我最终得到了其中的一些。例如,您的 formatAsTimeString
是一种 View 模型。如果它由单个 View Controller 使用,我会把它留在 View Controller 的文件中。
如果扩展被多个类使用,那么我会把它分解成一个单独的文件。我将以扩展名命名该文件。因此,例如,如果 formatAsTimeString
在多个文件中使用,那么我将有一个名为“Int+formatAsTimeString.swift”的文件,扩展可以在其中存在。
如果有很多相关的函数,那么我会把它们放在同一个文件中,并根据函数的抽象思想来命名文件。我通过想象如果我选择在不同的程序中使用它们是否必须将它们一起移动,我决定这些函数是相关的......例如,也许我有其他时间字符串相关的函数......
关于ios - Swift 扩展最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39947442/