如何覆盖NSDate描述?..方法调酒?

Hug*_*nso 3 nsdate ios swift method-swizzling swift2

我该怎么打电话

print(NSDate()) 
Run Code Online (Sandbox Code Playgroud)

和而不是接收通常的响应,获得所述一个我有一个命名的函数getString()是一个部分extensionNSDate.

这是我的扩展:

extension NSDate {

   //NSDate to String
    public func getString() -> String {
        let dateFormatter = NSDateFormatter()
        dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss ZZZ"
        dateFormatter.locale = NSLocale.currentLocale()

        return dateFormatter.stringFromDate(self)
    }
}
Run Code Online (Sandbox Code Playgroud)

请注意,我不想只使用:

NSDate().getString()
Run Code Online (Sandbox Code Playgroud)

我想覆盖description这个类的原始.

更新:

所以,一切看起来像唯一的选择是方法调整,如果可能的话.

谁对赏金感兴趣?

当心

我这样做只是为了个人成长并理解这个概念,而不是计划在这种情况下使用它来运送应用程序,现在甚至不确定我可以使用它的场景.

use*_*734 8

import Foundation

extension NSDate: Streamable {
    public func writeTo<Target : OutputStreamType>(inout target: Target) {
        let dateFormatter = NSDateFormatter()
        dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss ZZZ"
        dateFormatter.locale = NSLocale.currentLocale()

        print("without swizzling", dateFormatter.stringFromDate(self), toStream: &target)
    }
}

let date = NSDate()

print(date) // without swizzling 2016-03-05 00:09:34 +0100
Run Code Online (Sandbox Code Playgroud)

打印'默认'/原始行为/使用

print(date.description)
Run Code Online (Sandbox Code Playgroud)

如果您担心在扩展中使用打印,只需将其替换为

//print("without swizzling", dateFormatter.stringFromDate(self), toStream: &target)
let str = dateFormatter.stringFromDate(self)
str.writeTo(&target)
Run Code Online (Sandbox Code Playgroud)