Tino又想吃肉了

巧用@propertyWrapper避免非法字符串

Word count: 257Reading time: 1 min
2021/03/13

@propertyWrapper的一种用处

在实际开发中,有时候如果我们遇到后台返回的一个URL字符串中带有中文,会导致我们在代码中初始化URL失败。而这在swift里有了巧妙的解决方案——@propertyWrapper

@propertyWrapper

  • @propertyWrapper是swift中的一大特性,即属性包装。可以使用@propertyWrapper进行属性的统一限定或封装,减少重复的代码。更多具体的介绍这篇文章里不细讲。

使用@propertyWrapper避免URL初始化失败

  • 先放代码
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    @propertyWrapper
    struct Trimmed {
    private var value = String()

    var wrappedValue : String{
    get { value }
    set {
    //可以用于字符串去中文
    value = newValue.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed)!
    }
    }

    init(wrappedValue : String){
    self.wrappedValue = wrappedValue
    }
    }
  • 以上就是Trimmed这个属性包装器的具体实现,使用时只需要在属性前加上@Trimmed即可

效果

1
2
3
4
5
6
struct Test {
@Trimmed var name : String
}
var a = Test(name: "www.baidu中文.com")
print(a.name)
//输出`www.baidu%E4%B8%AD%E6%96%87.com`

TINO WU

CATALOG
  1. 1. @propertyWrapper
  2. 2. 使用@propertyWrapper避免URL初始化失败
  3. 3. 效果