Я пытаюсь понять оболочки свойств.
У меня есть еще один вопрос на 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
показывается ошибка
Значение типа String? не имеет имени findReplace
Как только кто-то предложил мне изменить строку структуры на
struct AdjustTextWithAppName {
, все это начало работать.
Почему? Я не могу понять, почему термин <String>
в структуре скрывал расширение созданного мной типа String
.
Почему это так?