我在3个不同的视图控制器的应用程序中有一个“在Facebook上分享”按钮。所以我写了一个名为“ShareCentral”的类,我想在这个类中做所有的共享操作。但是为了显示共享对话框,我需要将uiviewcontroller传递给我的ShareCentral类。我确实喜欢这样:
class ShareCentral {
var UIVC: UIViewController
init(vc:UIViewController) {
self.UIVC = vc
}
func shareOnFacebook() {
var content = LinkShareContent(url: URL(string:userProfileLink)!)
do {
try ShareDialog.show(from: UIVC, content: content)
}catch (let error) {
print(error)
}
}
}
这是我的视图控制器:
class SettingsViewController: UIViewController {
let shareCentral = ShareCentral(vc: self)
@IBAction func shareButtonClicked(_ sender: AnyObject) {
self.shareCentral.shareOnFacebook()
}
}
我得到以下编译器错误:
SettingsViewController.swift:40:41: Cannot convert value of type '(SettingsViewController) -> () -> (SettingsViewController)' to expected argument type 'UIViewController'
我知道如果我将UIVC的类型更改为“SettingsViewController”,问题就会消失。但正如我之前所说,我将在三个不同的视图控制器中使用此方法。
我该如何解决这个问题?
试试这个:
class ShareCentral {
unowned var UIVC: UIViewController
init(vc:UIViewController) {
self.UIVC = vc
}
func shareOnFacebook() {
var content = LinkShareContent(url: URL(string:userProfileLink)!)
do {
try ShareDialog.show(from: UIVC, content: content)
} catch (let error) {
print(error)
}
}
}
class SettingsViewController: UIViewController {
var shareVC: ShareVC!
override func viewDidLoad() {
super.viewDidLoad()
self.shareVC = ShareVC(vc: self)
}
@IBAction func shareButtonClicked(_ sender: AnyObject) {
self.shareCentral.shareOnFacebook()
}
}