首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >错误:“AnyObject?”与“AnyObject”不一样

错误:“AnyObject?”与“AnyObject”不一样
EN

Stack Overflow用户
提问于 2015-03-05 05:33:57
回答 2查看 202关注 0票数 0

我正在尝试使用.vcf共享联系人UIActivityViewController文件。但我得到的是“AnyObject?”与“AnyObject”不一样

以下是我的代码:

代码语言:javascript
复制
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)
        }

如有任何帮助,将不胜感激。

提前感谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-03-05 05:36:27

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

票数 0
EN

Stack Overflow用户

发布于 2015-03-05 05:39:25

字符?是一个类型修饰符。从AnyObject开始,编写AnyObject?,就有了一种新的‘可选的AnyObject’类型。这是与AnyObject不同的类型。由于Swift是强类型的,所以不能将Int放在String的预期位置,也不能将“可选的AnyObject”放置在预期AnyObject的位置。

当然,返回值也有类型。您可能会调用一个返回‘可选X’的函数;如果您试图在预期'X‘的位置使用该函数,您将得到一个类型错误--正如您所描述的。

如果错误与NSData.dataWithContentsOfMappedFile(path)有关,那么解决方案不是简单地添加一个! (操作符用于打开可选值,而是如果值为nil,则崩溃)。你应该使用:

代码语言:javascript
复制
["Send", (NSData.dataWithContentsOfMappedFile(path) ?? "default")]

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

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28870745

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档