我对使用Swift写作并不陌生,我正在尝试编写一些小游戏。我已经通过搜索和调试完成了大部分工作,但是我无法让UIActivityViewController正常工作。
我已经执行以下操作:
在GameViewController.swift中
func screenshot() -> UIImage {
UIGraphicsBeginImageContextWithOptions(view.bounds.size, false, 1.0)
view.drawHierarchy(in: view.bounds, afterScreenUpdates: true)
let image = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
return image!
}
和
func shareString(string: String, url: NSURL, image: UIImage) {
let vc = UIActivityViewController(activityItems: [string, url, image], applicationActivities: nil)
present(vc, animated: true, completion: nil)
}
然后在GameScene.swift中设置好:
protocol GameSceneDelegate {
func screenshot() -> UIImage
func shareString(string: String, url: NSURL, image: UIImage)
}
然后设置一个变量 var gameSceneDelegate = GameSceneDelegate.self
然后尝试调用函数
func share() {
let urlString = "http://www.google.com"
let url = NSURL(string: urlString)
let screenshot = gameSceneDelegate.screenshot
let initialTextString = "OMG! I scored \(score) points"
gameSceneDelegate.shareString(initialTextString, url: url!, image: screenshot)
}
但是当我尝试调用最后一个函数行时: gameSceneDelegate.shareString(initialTextString,url:url !,图片:屏幕截图)
我收到此错误:“通话中有其他参数”
我要去哪里了,我似乎无法理解为什么在函数定义中显然有3个参数的情况下,shareString无法采用3个参数。
答案 0 :(得分:0)
在函数声明中没有可选的内容,但是在调用函数时,您是在强制展开网址-尝试不要将其设为可选的
编辑:
当编译器无法找出问题所在时,我遇到了此错误-可能是另一行上面的内容错误分配了类型(例如数组类型中的字典,或者使用了不再存在的常量)存在)。我建议对函数进行重新排序,看看是否在同一行上发生了相同的错误。
答案 1 :(得分:0)
let screenshot = gameSceneDelegate.screenShot
创建类型为()->UIImage
的变量,即函数。
您需要像下面这样评估委托函数:
let screenshot = gameSceneDelegate.screenShot()
这将根据需要创建类型为UIImage
的变量