Subclassing SLComposeViewController指定的初始化程序错误

问题描述:

我试图创建一个SLComposeViewController的子类,使它更容易在我的情况下使用。当我尝试创建一个required init并调用super.init(forServiceType: SLServiceTypeFacebook)我收到以下错误:Subclassing SLComposeViewController指定的初始化程序错误

Must call a designated initializer of the superclass 'SLComposeViewController'

但是当我检查docs,没有什么表明有一个指定初始化 - 所以我去了它的超UIViewController指定的初始值为super.init(nibName: String?, bundle: NSBundle?)。但是实现这个功能不允许我设置SLComposeViewControllerserviceType,因为它的属性为get

我做错了什么?我不能继承SLComposeViewController吗?

这里是我的代码:

import Foundation 
import UIKit 
import Social 

enum ShareType { 
    case FB, Twitter 
} 

class ShareViewController: SLComposeViewController { 

    var shareType: ShareType! 

    required init(shareType: ShareType) { 
     self.shareType = shareType 

     switch shareType { 
     case .FB: 
      super.init(forServiceType: SLServiceTypeFacebook) 
     case .Twitter: 
      super.init(forServiceType: SLServiceTypeTwitter) 
     } 

    } 


    required init?(coder aDecoder: NSCoder) { 
     fatalError("init(coder:) has not been implemented") 
    } 


} 

谢谢!

尝试将super.init()添加到您的init()。 我知道这似乎很简单,但这就是编译器所抱怨的。我没有使用SLComposeViewController,但我已经遇到了与其他类。

+0

没有运气 - 同样的错误 – uti0mnia

+0

好。如果在此之前没有人提供解决方案,我将在几个小时内有时间进行深入研究。 –

+1

好吧,我想我已经完成了所有的打头和咬牙切齿,我仍然无法弄清楚如何完成你想要的。从编译器给我的错误看来,它似乎认为'init!(forServiceType serviceType:String!)'是一个方便的初始值设定项。这直接与文档相矛盾。祝你好运。如果你确实解决了这个问题,请回到这里。 –

我能做到这一点使用扩展:

enum ShareType { 
    case FB, Twitter 
} 

extension SLComposeViewController { 

    convenience init(shareType: ShareType) { 

     switch shareType { 
     case .FB: 
      super.init(forServiceType: SLServiceTypeFacebook) 
     case .Twitter: 
      super.init(forServiceType: SLServiceTypeTwitter) 
     } 

    } 
} 

这样调用:

let twitterSheet = SLComposeViewController(shareType: .Twitter)