我有一个像这样插值的字符串
let userID = 123
let userProfileUrl = "website.com/user/\(userID)"
我想让website.com/user/\(userID)
成为常量,但仍然保留其插值,以便我可以使用userID
进行插值。
我想知道是否有人知道这样做的好方法
答案 0 :(得分:1)
您可以使userProfileUrl成为一个惰性var。在这种情况下,您需要指定userProfileUrl的类型(即String
),并且需要使用self.userID
而不是userID
let userID = 123
lazy var userProfileUrl: String = "website.com/user/\(self.userID)"
或者,如果两个属性都是常量,并且不依赖于类的实例,则可以将它们放在类定义之外,它应该可以工作:
let userID = 123
let userProfileUrl = "website.com/user/\(userID)"
class MyClass {
}
您还可以将userProfileUrl
设为计算属性
let userID = 123
var userProfileUrl: String {
return "website.com/user/\(userID)"
}
如果您不喜欢计算属性添加的额外行,您可以对其进行格式化以使其全部在一行
let userID = 123
var userProfileUrl: String { return "website.com/user/\(userID)" }
答案 1 :(得分:0)
var userProfileURL: (String) -> String = {
return "website.com/user/\($0)"
}
userProfileURL(userID)
这可以,但我会考虑使用枚举。您现在可以为每个端点创建一个新案例。
enum Website {
case UserProfile(Int)
var base: String { return "http://website.com" }
var path: String {
switch self {
case let .UserProfile(userID):
return "user/\(userID)"
}
}
var url: URL { return URL(string: "\(base)/\(path)")! }
}
let userProfileUrl = Website.UserProfile(123).url
答案 2 :(得分:-3)
这可能是您希望NSString
与String
的桥接使用的地方-initWithFormat
:
let userProfileUrl = String(format: "website.com/user/%d", userId)