使用字符串插值时,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中既可以工作,也可以不在代码中。我仔细检查了变量主机是否设置正确。
有什么想法吗?
答案 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。