2016-09-16 49 views
4

似乎URL初始值设定项(字符串:“”)在使用字符串插值时拒绝正确初始化。问题是,当我使用类似URL和字符串插值

let url = URL(string: "http://192.168.1.1") 

它的工作原理,但以下

let host = "192.168.1.1" 
let url = URL(string: "http://\(host)") 

不和url =零。

在Playground中,但不在代码中。我仔细检查了变量主机是否设置正确。

有什么想法?

+0

'在游乐场两部作品,但不是在code.'没有理由为,它应该工作相同的应用程序。我的猜测是你在其他地方有另外一个问题 - 或者你的价值观不是你认为的那样,请与调试器核对一下。 – Moritz

+0

只要提一下,在使用NSURL之前它已经很长时间了,直到我昨天将代码迁移到Swift3。 – user2754787

+0

它在测试应用程序中适用于Swift 3。 [截图](https://www.evernote.com/l/AOw6OBs-sdlFl6y0v4DPhjPGwtfBzMNp2lI) – Moritz

回答

0

我在swift世界很新,我也有这个问题,在我的情况下,我宣布让其他类中的URL不变,并且swift不会因为错误而大叫。所以你可以搜索你是否声明了两次var。

6

有类似的问题。

这个工作在斯威夫特2,但是在斯威夫特3(I我们的应用程序,与Facebook类似&透过Facebook Messenger的2间反弹)爆发:与隐式声明展开自选(变量

var userId: Int! 
var userType: String! 

// userId and userType are set by some code somewhere else... 

if let url = URL(string: "anotherappicreated://?userId=\(userId)&userType=\(userType)") { 
    UIApplication.shared.openURL(url) // Open our other app 
} 

在斯威夫特2! )工作时无需拆开包装。在斯威夫特3看来你必须明确地拆开包装选配:

var userId: Int! 
var userType: String! 

// userId and userType are set by some code somewhere else... 

if let userId = userId,  // <-- HAD TO ADD THIS 
    let userType = userType, // <-- AND THIS 
    let url = URL(string: "anotherappicreated://?userId=\(userId)&userType=\(userType)") { 
    UIApplication.shared.openURL(url) // Open our other app 
}