2015-10-18 27 views
0

我不明白」曖昧,爲什麼下面的代碼我用來初始化一個UIActivityViewController導致錯誤:Type of expression is ambiguous without more context斯威夫特2:初始化斯威夫特一個UIActivityViewController當問題:表達式的類型是沒有更多的上下文

let shareText = "..." 
    let url = NSURL(string: "http://google.com") 

    let shareObjects = [shareText, url] // Compiler error happens here. 
    let controller = UIActivityViewController(activityItems: shareObjects, applicationActivities: nil) 

對象陣列清晰地包含StringNSURL。無論如何,無論如何,包含這兩者的數組字面應當通過直覺來假定最低的通用類型(如最近的共同祖先)[AnyObject]

強制向下轉換也不起作用:即說let shareObjects = [shareText, url] as! [AnyObject]不會使錯誤消失。

回答

1

好吧,我剛剛發現爲什麼。

NSURL的init是failable,這使得url變量實際上是一個可選項。

shareText不是可選的。

粘貼shareText,一個非可選項,與url,一個可選項一起導入數組會導致錯誤。

解決方案是確保url是非可選的。