Error : 'AnyObject?' is not identical to 'AnyObject'
Error : 'AnyObject?' is not identical to 'AnyObject'
我正在尝试使用 UIActivityViewController 共享联系人 .vcf 文件。但是我得到 'AnyObject?' is not identical to '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)
}
任何帮助将不胜感激
提前致谢
尝试let objectsToShare = ["Send", NSData.dataWithContentsOfMappedFile(path)!]
字符?
是类型修饰符。你从 AnyObject
开始,写 AnyObject?
并且你有一个新的类型 'Optional AnyObject'。这是与 AnyObject
不同的类型。由于 Swift 是强类型的,因此您不能在需要 String
的地方放置 Int
,也不能在需要 AnyObject
的地方放置 'Optional AnyObject'。
当然,return 值也有类型。您可能正在调用 return 一个 'optional X' 的函数;如果您尝试在预期 'X' 的地方使用它,您将收到类型错误 - 正如您所描述的那样。
如果错误与 NSData.dataWithContentsOfMappedFile(path)
有关,那么解决方案不是简单地添加 !
(用于解包可选值的运算符,但如果值为 nil
则 CRASH)。你应该使用:
["Send", (NSData.dataWithContentsOfMappedFile(path) ?? "default")]
它将使用 NSData
值(如果存在),否则 "default"
(您决定使用什么,如果有的话)。
我正在尝试使用 UIActivityViewController 共享联系人 .vcf 文件。但是我得到 'AnyObject?' is not identical to '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)
}
任何帮助将不胜感激
提前致谢
尝试let objectsToShare = ["Send", NSData.dataWithContentsOfMappedFile(path)!]
字符?
是类型修饰符。你从 AnyObject
开始,写 AnyObject?
并且你有一个新的类型 'Optional AnyObject'。这是与 AnyObject
不同的类型。由于 Swift 是强类型的,因此您不能在需要 String
的地方放置 Int
,也不能在需要 AnyObject
的地方放置 'Optional AnyObject'。
当然,return 值也有类型。您可能正在调用 return 一个 'optional X' 的函数;如果您尝试在预期 'X' 的地方使用它,您将收到类型错误 - 正如您所描述的那样。
如果错误与 NSData.dataWithContentsOfMappedFile(path)
有关,那么解决方案不是简单地添加 !
(用于解包可选值的运算符,但如果值为 nil
则 CRASH)。你应该使用:
["Send", (NSData.dataWithContentsOfMappedFile(path) ?? "default")]
它将使用 NSData
值(如果存在),否则 "default"
(您决定使用什么,如果有的话)。