2015-06-12 31 views
0

我需要子类化NSFileManager来为它添加一些需要的功能。 我创建了一个子类,添加了函数和私有变量,现在我想从这样的其他类访问函数。 MyFileManager.defaultManager().awesomeFunction("Test")Swift:子类NSFileManager

这里是我的代码:

import UIKit 

class AwesomeFileManager: NSFileManager { 

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

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

} 

不知怎的,我无法从其他类访问该功能。我究竟做错了什么?

我使用雨燕2.0

+2

你真的在你的子类上写了'defaultManager'方法吗? – borrrden

+0

我不会继承NSFileManager,因为defaultManager将始终返回一个NSFileManager实例,而不是您的子类。创建自己的对象类或在NSFileManager上使用类别/扩展。 – EricS

+0

为什么不使用扩展为NSFileManager添加更多功能? (但它不支持添加属性,但仅支持功能) –

回答

0

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

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 
    } 

} 

因为你不能添加变量的扩展,我给你的代码添加关联密钥以存储/检索要添加扩展名的任何对象。