迅速使用选择模式如何改善可选项的API设计

  

迅速使用选择模式如何改善可选项的API设计?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

SwiftUI中提供了很多“新颖”的API设计思路和迅速的使用方式,我们可以进行借鉴,并反过来使用到普通的迅速代码中。<代码> PreferenceKey> PreferenceKey>

在这篇文章里,我们就来看看要如何做。文中相关的代码可以在这里找到。你可以将这些代码复制到操场中执行并查看结果。

<强>红绿灯

用一个交通信号灯作为例子。

把杆偈褂醚≡衲J饺绾胃纳瓶裳∠畹腁PI设计"

作为模型类型的<代码> TrafficLight> 鸡毛蒜皮,<代码>。进行和<代码>。注意三种<代码> ,它们分别代表停止,通行和注意三种状态(当然,通俗来说就是“红绿黄”,但是模型不应该和颜色,也就是视图层级相关)。它还持有一个<代码> 状态来表示当前的状态,并在设置时将这个状态通过<代码>公共类TrafficLight {      公共枚举状态{   情况下停止   情况下进行   情况下谨慎   }      公私(套)var状态:状态=鸡毛蒜皮{   didSet{>光=TrafficLight ()   光。onstatechange={(弱自我)状态   让其他自我=自我{返回}   让颜色:用户界面颜色   开关状态{=.green案例.proceed:颜色=.yellow案例.caution:颜色   案例鸡毛蒜皮:颜色=r   }   UIView。动画(withDuration: 0.25) {   self。view。写成backgroundColor=颜色   }   }   light.start ()

这样,视图的颜色就可以随着<代码> TrafficLight>

把杆偈褂醚≡衲J饺绾胃纳瓶裳∠畹腁PI设计"

<强>青色信号

世界很大,有些地方(比如日本)会使用倾向于青色,或者实际上应该是绿松色(青绿色),来表示”可以通行”。有时候这也是技术的限制或者进步所带来的结果。

绿灯是传统上绿色的颜色(因此得名)尽管现代领导绿灯是蓝绿色的。

——维基百科中关于红绿灯的记述

把杆偈褂醚≡衲J饺绾胃纳瓶裳∠畹腁PI设计"

假设我们想要让<代码> TrafficLight 支持青色的绿灯,一个能想到的最简单的方式,就是在<代码> TrafficLight>

公共类TrafficLight {
  公共enum GreenLightColor {
  情况下绿色
  情况下青绿色
  }
  公共var preferredGreenLightColor: GreenLightColor=.green//?
  }

然后在<代码> ViewController>

 TrafficLight延伸。GreenLightColor {
  var颜色:用户界面颜色{
  开关自{
  案例.green:
  返回.green
  案例.turquoise:
  返回用户界面颜色(红色:0.25,格林:0.88,蓝色:0.82,α:1.00)
  }
  }
  }
  
  光。preferredGreenLightColor=.turquoise
  光。onstatechange={(弱,弱光)状态
  警卫让自我=自我,让其他光={返回}//?/例.proceed:颜色=.green=light.preferredGreenLightColor.color案例.proceed:颜色
  }

这样做当然能够解决问题,但是也会带来一些隐患。首先,需要在<代码> TrafficLight> preferredGreenLightColor> TrafficLight> GreenLightColor 属性将会为每个实例带来8字节的开销。如果我们需要同时处理很多<代码> TrafficLight 实例,而其中只有很少数需要<代码> .turquoise>

严格来说,上例的TrafficLight。GreenLightColor枚举其实只需要占用1个字节。但是64位系统中在内存分配中的最小单位是8个字节。

如果想要添加的属性不是像例子中这样简单的枚举,而是更加复杂的带有多个属性的类型的话,这一开销会更大。

迅速使用选择模式如何改善可选项的API设计