【发布时间】:2020-05-15 04:01:49
【问题描述】:
我正在尝试理解属性包装器。
我有另一个关于 SO 的问题,我试图创建一个像这样的属性包装器:
extension String {
func findReplace(_ target: String, withString: String) -> String
{
return self.replacingOccurrences(of: target,
with: withString,
options: NSString.CompareOptions.literal,
range: nil)
}
}
@propertyWrapper
struct AdjustTextWithAppName<String> {
private var value: String?
init(wrappedValue: String?) {
self.value = wrappedValue
}
var wrappedValue: String? {
get { value }
set {
if let localizedAppName = Bundle.main.localizedInfoDictionary?["CFBundleName"] as? String {
let replaced = value.findReplace("$$$", withString: localizedAppName)
}
value = nil
}
}
}
这不起作用,因为value.findReplace 行显示错误
字符串类型的值?没有名字 findReplace
一旦有人建议我将结构行更改为
struct AdjustTextWithAppName {
整个事情开始起作用了。
为什么?我不明白为什么结构上的 <String> 术语隐藏了我创建的 String 类型的扩展。
这是为什么呢?
【问题讨论】:
-
但这是你今天早些时候问过的question的重复,为什么要问同样的事情两次?
-
不是重复的。在第一个问题中,我试图了解出了什么问题。在这个问题中,我试图理解为什么。