迁移到 Swift 2 后出现 UIActivityViewController 错误
UIActivityViewController error after migration to Swift 2
ShareButton
函数在Xcode6中有效,但升级到Xcode 7
后出现错误:
avc.completionWithItemsHandler = {
我的代码:
@IBAction func ShareButton(sender: AnyObject) {
let things = ["Thank you"]
let avc = UIActivityViewController(activityItems:things, applicationActivities:nil)
avc.setValue("Salon Job HK", forKey: "subject")
avc.completionWithItemsHandler = {
(s: String!, ok: Bool, items: [AnyObject]!, err:NSError!) -> Void in
}
self.presentViewController(avc, animated:true, completion:nil)
if let pop = avc.popoverPresentationController {
let v = sender as! UIView // sender would be the button view tapped, but could be any view
pop.sourceView = v
pop.sourceRect = v.bounds
}
}
只需检查 Swift 2.0 UIActivityViewControllerCompletionWithItemsHandler 的声明:
typealias UIActivityViewControllerCompletionWithItemsHandler =
(String?, Bool, [AnyObject]?, NSError?) -> Void
这样试试:
avc.completionWithItemsHandler = {
(s: String?, ok: Bool, items: [AnyObject]?, err:NSError?) -> Void in
}
或者简单地说:
avc.completionWithItemsHandler = {
(s, ok, items, err) in
}
Swift 3
@IBAction func shareButton(sender: Any) {
let things = ["Thank you"]
let avc = UIActivityViewController(activityItems: things, applicationActivities: nil)
avc.setValue("Salon Job HK", forKey: "subject")
avc.completionWithItemsHandler = {
(activityType, completed, returnedItems, activityError) in
// code
}
present(avc, animated: true)
}
除了上面的答案,你也可以将它设置为 nil,因为当调用完成时你似乎没有做任何事情
avc.completionWithItemsHandler = nil
对于 Swift 3.0:
这又略有改变
UIActivityViewControllerCompletionWithItemsHandler = (UIActivityType?, Bool, [Any]?, Error?) -> Void
ShareButton
函数在Xcode6中有效,但升级到Xcode 7
后出现错误:
avc.completionWithItemsHandler = {
我的代码:
@IBAction func ShareButton(sender: AnyObject) {
let things = ["Thank you"]
let avc = UIActivityViewController(activityItems:things, applicationActivities:nil)
avc.setValue("Salon Job HK", forKey: "subject")
avc.completionWithItemsHandler = {
(s: String!, ok: Bool, items: [AnyObject]!, err:NSError!) -> Void in
}
self.presentViewController(avc, animated:true, completion:nil)
if let pop = avc.popoverPresentationController {
let v = sender as! UIView // sender would be the button view tapped, but could be any view
pop.sourceView = v
pop.sourceRect = v.bounds
}
}
只需检查 Swift 2.0 UIActivityViewControllerCompletionWithItemsHandler 的声明:
typealias UIActivityViewControllerCompletionWithItemsHandler = (String?, Bool, [AnyObject]?, NSError?) -> Void
这样试试:
avc.completionWithItemsHandler = {
(s: String?, ok: Bool, items: [AnyObject]?, err:NSError?) -> Void in
}
或者简单地说:
avc.completionWithItemsHandler = {
(s, ok, items, err) in
}
Swift 3
@IBAction func shareButton(sender: Any) {
let things = ["Thank you"]
let avc = UIActivityViewController(activityItems: things, applicationActivities: nil)
avc.setValue("Salon Job HK", forKey: "subject")
avc.completionWithItemsHandler = {
(activityType, completed, returnedItems, activityError) in
// code
}
present(avc, animated: true)
}
除了上面的答案,你也可以将它设置为 nil,因为当调用完成时你似乎没有做任何事情
avc.completionWithItemsHandler = nil
对于 Swift 3.0:
这又略有改变UIActivityViewControllerCompletionWithItemsHandler = (UIActivityType?, Bool, [Any]?, Error?) -> Void