更新部分章节到 Swift 5.5 (#1152)
* Advanced_Operators Swift 5.3 beata * feat: update Opaque Types Swift 5.5 * feat: update Properties Swift 5.5 * feat: update AdvancedOperators Swift 5.5 * fix: 根据校对意见修改
This commit is contained in:
@ -69,7 +69,7 @@ class DataImporter {
|
||||
|
||||
class DataManager {
|
||||
lazy var importer = DataImporter()
|
||||
var data = [String]()
|
||||
var data: [String] = []
|
||||
// 这里会提供数据管理功能
|
||||
}
|
||||
|
||||
@ -294,8 +294,7 @@ stepCounter.totalSteps = 896
|
||||
```swift
|
||||
@propertyWrapper
|
||||
struct TwelveOrLess {
|
||||
private var number: Int
|
||||
init() { self.number = 0 }
|
||||
private var number = 0
|
||||
var wrappedValue: Int {
|
||||
get { return number }
|
||||
set { number = min(newValue, 12) }
|
||||
@ -308,7 +307,7 @@ struct TwelveOrLess {
|
||||
>
|
||||
> 上面例子以 `private` 的方式声明 `number` 变量,这使得 `number` 仅在 `TwelveOrLess` 的实现中使用。写在其他地方的代码通过使用 `wrappedValue` 的 getter 和 setter 来获取这个值,但不能直接使用 `number`。有关 `private` 的更多信息,请参考 [访问控制](./26_Access_Control.md)
|
||||
|
||||
通过在属性之前写上包装器名称作为特性的方式,你可以把一个包装器应用到一个属性上去。这里有个存储小矩形的结构体。通过 `TwelveOrLess` 属性包装器实现类似(挺随意的)对“小”的定义。
|
||||
通过在属性之前写上包装器名称作为特性的方式,你可以把一个包装器应用到一个属性上去。这里有个存储小矩形的结构体,通过 `TwelveOrLess` 属性包装器来确保它的长宽均小于等于 12。
|
||||
|
||||
```swift
|
||||
struct SmallRectangle {
|
||||
@ -462,12 +461,8 @@ print(mixedRectangle.height)
|
||||
```swift
|
||||
@propertyWrapper
|
||||
struct SmallNumber {
|
||||
private var number: Int
|
||||
var projectedValue: Bool
|
||||
init() {
|
||||
self.number = 0
|
||||
self.projectedValue = false
|
||||
}
|
||||
private var number = 0
|
||||
var projectedValue = false
|
||||
var wrappedValue: Int {
|
||||
get { return number }
|
||||
set {
|
||||
@ -540,6 +535,22 @@ struct SizedRectangle {
|
||||
>
|
||||
> 局部范围的常量和变量从不延迟计算。
|
||||
|
||||
可以在局部存储型变量上使用属性包装器,但不能在全局变量或者计算型变量上使用。比如下面的代码,`myNumber` 使用 `SmallNumber` 作为属性包装器。
|
||||
|
||||
```swift
|
||||
func someFunction() {
|
||||
@SmallNumber var myNumber: Int = 0
|
||||
|
||||
myNumber = 10
|
||||
// 这时 myNumber 是 10
|
||||
|
||||
myNumber = 24
|
||||
// 这时 myNumber 是 12
|
||||
}
|
||||
```
|
||||
|
||||
就像将 `SmallNumber` 应用到属性上一样,将 `myNumber` 赋值为 10 是有效的。而因为这个属性包装器不允许值大于 12,将 `myNumber` 赋值为 24 时则会变成 12。
|
||||
|
||||
## 类型属性 {#type-properties}
|
||||
|
||||
实例属性属于一个特定类型的实例,每创建一个实例,实例都拥有属于自己的一套属性值,实例之间的属性相互独立。
|
||||
|
||||
Reference in New Issue
Block a user