错误:' AnyObject?'与任何对象'不同

时间:2015-03-05 05:33:57

标签: swift uiactivityviewcontroller vcard

我正在尝试使用UIActivityViewController共享联系人.vcf文件。但我得到的是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)
        }

任何帮助将不胜感激

提前致谢

2 个答案:

答案 0 :(得分:3)

字符?是一种类型修饰符。您从AnyObject开始,写AnyObject?并且您有一个新类型的' Optional AnyObject'。这是与AnyObject不同的类型。由于Swift是强类型的,因此您无法将Int放在期望String的位置,也不能放置一个' Optional AnyObject'预计会有AnyObject

当然,返回值也有类型。您可能正在调用一个返回'可选X'的函数。如果你试图使用那个' X'如您所述,您会遇到类型错误。

如果错误是NSData.dataWithContentsOfMappedFile(path),那么解决方案不是简单地添加!(运算符来解包可选值,但如果值为nil则为CRASH)。你应该使用:

["Send", (NSData.dataWithContentsOfMappedFile(path) ?? "default")]

如果存在,将使用NSData值,否则"default"(您决定使用什么,如果有的话)。

答案 1 :(得分:0)

尝试let objectsToShare = ["Send", NSData.dataWithContentsOfMappedFile(path)!]