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?)
。但是实现这个功能不允许我设置SLComposeViewController
的serviceType
,因为它的属性为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
,但我已经遇到了与其他类。
答
我能做到这一点使用扩展:
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)
没有运气 - 同样的错误 – uti0mnia
好。如果在此之前没有人提供解决方案,我将在几个小时内有时间进行深入研究。 –
好吧,我想我已经完成了所有的打头和咬牙切齿,我仍然无法弄清楚如何完成你想要的。从编译器给我的错误看来,它似乎认为'init!(forServiceType serviceType:String!)'是一个方便的初始值设定项。这直接与文档相矛盾。祝你好运。如果你确实解决了这个问题,请回到这里。 –