0

我需要继承 NSFileManager 来添加一些需要的功能。我创建了一个子类,添加了函数和私有变量,现在我想像这样从另一个类访问函数。MyFileManager.defaultManager().awesomeFunction("Test")

这是我的代码:

import UIKit

class AwesomeFileManager: NSFileManager {

    private let awesomeLet = ["let1", "let2", "let3"]

    func awesomeFunction(parameter: String) -> Bool! {
        return true
    }

}

不知何故,我无法从另一个类访问该函数。我究竟做错了什么?

我正在使用 Swift 2.0

4

2 回答 2

0

覆盖defaultManager并确保它返回您的类的实例。

于 2015-06-12T22:04:11.380 回答
0

为了避免您需要访问新方法的方法的子类化,最好使用扩展来处理该任务:

extension NSFileManager {

    private struct AssociatedKey {
        static var awesomeLet: [String]?
    }

    var awesomeLet: [String]? {
        get {
            return objc_getAssociatedObject(self, &AssociatedKey.awesomeLet) as? [String]
        }

        set {
            if let value = newValue {
                objc_setAssociatedObject(self, &AssociatedKey.awesomeLet, value, .OBJC_ASSOCIATION_COPY_NONATOMIC)
            }
        }
    }

    func awesomeFunction(parameter: String) -> Bool! {
        return true
    }

}

因为您无法向扩展添加变量,所以我为您提供了添加关联键的代码,以存储/检索您想要添加扩展的任何对象。

于 2015-06-12T22:07:50.867 回答