我正在尝试使用.vcf共享联系人UIActivityViewController文件。但我得到的是“AnyObject?”与“AnyObject”不一样
以下是我的代码:
let dirs : [String]? = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomainMask.AllDomainsMask, true) as? [String]
if ((dirs) != nil) {
let dir = dirs![0]; //documents directory
let path = dir.stringByAppendingPathComponent("\(person.name).vcf")
let text: NSString = person.contact as NSString
text.writeToFile(path, atomically: false, encoding: NSUTF8StringEncoding, error: nil);
let objectsToShare = ["Send", NSData.dataWithContentsOfMappedFile(path)]
let activityVC = UIActivityViewController(activityItems: objectsToShare, applicationActivities: nil)
self.presentViewController(activityVC, animated: true, completion: nil)
}如有任何帮助,将不胜感激。
提前感谢
发布于 2015-03-05 05:36:27
试试let objectsToShare = ["Send", NSData.dataWithContentsOfMappedFile(path)!]
发布于 2015-03-05 05:39:25
字符?是一个类型修饰符。从AnyObject开始,编写AnyObject?,就有了一种新的‘可选的AnyObject’类型。这是与AnyObject不同的类型。由于Swift是强类型的,所以不能将Int放在String的预期位置,也不能将“可选的AnyObject”放置在预期AnyObject的位置。
当然,返回值也有类型。您可能会调用一个返回‘可选X’的函数;如果您试图在预期'X‘的位置使用该函数,您将得到一个类型错误--正如您所描述的。
如果错误与NSData.dataWithContentsOfMappedFile(path)有关,那么解决方案不是简单地添加一个! (操作符用于打开可选值,而是如果值为nil,则崩溃)。你应该使用:
["Send", (NSData.dataWithContentsOfMappedFile(path) ?? "default")]如果NSData值存在,它将使用它,否则使用"default" (您决定使用什么,如果有的话)。
https://stackoverflow.com/questions/28870745
复制相似问题