相关疑难解决方法(0)

在Swift中返回instancetype

我正在尝试进行此扩展:

extension UIViewController
{
    class func initialize(storyboardName: String, storyboardId: String) -> Self
    {
        let storyboad = UIStoryboard(name: storyboardName, bundle: nil)
        let controller = storyboad.instantiateViewControllerWithIdentifier(storyboardId) as! Self

        return controller
    }
}
Run Code Online (Sandbox Code Playgroud)

但我得到编译错误:

错误:无法将'UIViewController'类型的返回表达式转换为返回类型'Self'

可能吗?我也想成为init(storyboardName: String, storyboardId: String)

swift swift-extensions swift2

35
推荐指数
2
解决办法
1万
查看次数

如何在NSManagedObject Swift扩展中创建托管对象子类的实例?

当创建一个扩展助手来NSManagedObject创建一个新的托管对象子类时,swift提供了Self模仿的类型,instancetype这很好,但我似乎无法进行类型转换AnyObject.下面的代码没有编译错误'AnyObject'不能转换为'Self'

救命?

extension NSManagedObject
{
    class func createInContext(context:NSManagedObjectContext) -> Self {
        var classname = className()
        var object: AnyObject = NSEntityDescription.insertNewObjectForEntityForName(classname, inManagedObjectContext: context)
        return object
    }


    class func className() -> String {
        let classString = NSStringFromClass(self)
        //Remove Swift module name
        let range = classString.rangeOfString(".", options: NSStringCompareOptions.CaseInsensitiveSearch, range: Range<String.Index>(start:classString.startIndex, end: classString.endIndex), locale: nil)
        return classString.substringFromIndex(range!.endIndex)
    }

}
Run Code Online (Sandbox Code Playgroud)

core-data nsmanagedobject swift

18
推荐指数
2
解决办法
4379
查看次数

基于类的通用返回类型

我正在尝试在一个类上创建工厂方法,该类会自动转换为它所在的类。

extension NSObject {
    // how can I get the return type to be the current NSObject subclass
    // instead of NSObject?
    class func create() -> NSObject {
        return self.init()
    }

    // example: create(type: NSArray.self)
    class func create<T:NSObject>(type:T.Type) -> T {
        return T()
    }
}
Run Code Online (Sandbox Code Playgroud)

示例二有效,但作为类方法没有任何优势:

let result = NSArray.create(type: NSArray.self) 
Run Code Online (Sandbox Code Playgroud)

但我希望能够打电话:

let result = NSArray.create() 
Run Code Online (Sandbox Code Playgroud)

而不必事后施法。有没有办法在 Swift 中做到这一点?

generics factory swift

1
推荐指数
1
解决办法
1349
查看次数