Swift扩展最佳实践

Adr*_*ian 4 ios swift swift3

我最近迷上了Extensions。有一件事我发现是一个巨大的皮塔饼是确定在哪里藏匿一个有用的方法是这样的Array,一个NSManagedObject

我所做的就是将扩展名放在一个NSObject名为的类文件中,CustomExtensions然后按字母顺序列出该类扩展名。

它可以工作,但是我想看看它是否与最佳实践保持一致。如果不是,最好的跟踪方式是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
Run Code Online (Sandbox Code Playgroud)

Dan*_* T. 5

我认为尚未找到解决此问题的“最佳实践”。也就是说,这是MHO:

最终,我用在C中执行全局函数的方式来对待这些扩展。毕竟,这基本上就是它们。具有特殊语法的全局函数...

如果扩展名仅在一个文件中使用,那么我会将扩展名放在同一文件中。结束时,我最终得到了很多。例如,您formatAsTimeString是视图模型之类的东西。如果它由单个视图控制器使用,则将其保留在视图控制器的文件中。

如果扩展名被多个类使用,那么我会将其分解为一个单独的文件。我将以扩展名命名该文件。因此,例如,如果formatAsTimeString在多个文件中使用,那么我将拥有一个名为“ Int + formatAsTimeString.swift”的文件,该扩展名可以存在。

如果有许多相关功能,那么我将它们放到同一文件中,并根据功能的抽象思想为文件命名。我通过想象如果选择在其他程序中使用它们是否必须一起移动来确定这些函数是否相关...例如,也许我还有其他与时间字符串相关的函数...