URL和字符串插值

时间:2016-09-16 10:16:33

标签: swift swift3

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

这样的东西时
let url = URL(string: "http://192.168.1.1")

它有效,但以下

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

没有,url = nil。

在Playground中既可以工作,也可以不在代码中。我仔细检查了变量主机是否设置正确。

有什么想法吗?

2 个答案:

答案 0 :(得分:7)

有类似的问题。

这在Swift 2中运行但在Swift 3中爆发(我在两个应用程序之间反弹,类似于Facebook和Facebook Messenger):

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
}

在Swift 2中,隐式解包的选项(使用!声明的变量)无需打开它们即可运行。在Swift 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
}

答案 1 :(得分:0)

我在swift世界中相当新,我也遇到了这个问题,在我的情况下,我声明在其他类中使用常量URL并且swift没有作为错误大喊大叫。因此,您可以搜索是否声明了两次var。