我正在尝试创建SLComposeViewController
的子类,以使其在我的情况下更易于使用。当我尝试创建required init
并调用super.init(forServiceType: SLServiceTypeFacebook)
时,出现以下错误:Must call a designated initializer of the superclass 'SLComposeViewController'
但是,当我检查docs时,没有任何迹象表明存在指定的初始值设定项-因此,我转到其超类UIViewController
,指定的初始值设定项为super.init(nibName: String?, bundle: NSBundle?)
。但是实现此操作不允许我设置serviceType
的SLComposeViewController
,因为它具有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")
}
}
谢谢!
最佳答案
我可以使用扩展来实现:
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)
关于ios - 子类化SLComposeViewController指定的初始化错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33356210/