易于阅读的自定义字符串可转换

有什么快速简便的方法可以使您的打印对帐单输出更整洁,更易读? 看看协议Custom String Convertible! 我发现该协议在我的项目中非常有用,并且想分享一下这是什么以及如何使用它的快速概述。

Apple的文档将“自定义字符串可转换”定义为“一种具有自定义文本表示形式的类型。”简而言之,真正发生的是,当您使类或结构符合“自定义字符串可转换”时,您会自动获得一个内置的description属性,即您可以将其设置为任意字符串。 这个超灵活的描述属性是“自定义字符串可转换”的核心,因此它对于创建清晰易读的输出代码如此有用。

在我们开始将Custom String Convertible应用于您的代码之前,让我们看一下没有此协议的代码…即我们要避免的事情! 从自定义类型开始:

  struct Dog { 
  var品种:字符串 
 变量名称:字符串 
 变量年龄:整数 
  var color:字符串 
  } 

现在,我们将创建几个Dog对象的实例,并将它们添加到dogs数组中。

  var狗:[Dog] = [] 

  let dog1 = Dog(品种:“ Beagle”,名称:“ Spot”,年龄:5,颜色:“ Brown and white”) 
  let dog2 = Dog(品种:“贵宾犬”,名称:“蓬松”,年龄:2,颜色:“灰色”) 
  let dog3 = Dog(品种:“拉布拉多”,名称:“ Buddy”,年龄:9,颜色:“黑色”) 

 狗= [dog1,dog2,dog3] 

在此示例中,让我们从最大年龄到最小年龄对这些进行排序,并使用打印语句来确保我的排序方法有效。

  func sortDogs(){ 
  dogs = dogs.sorted {返回$ 0.age> $ 1.age} 
 打印(狗) 
  } 
  sortDogs() 
  // [Dog(品种:“ Labrador”,名称:“ Buddy”,年龄:9,颜色:“ Black”),Dog(品种:“ Beagle”,名称:“ Spot”,年龄:5,颜色:“ Brown”和白色”),狗(品种:“贵宾犬”,名称:“蓬松”,年龄:2,颜色:“灰色”)] 

这些是否按年龄正确分类? 要找出答案,我需要浏览输出-其中包括我们不需要的大量信息,例如名称品种等。 可读性肯定可以提高。

解? 使Dog符合Custom String Convertible。

  struct Dog:CustomStringConvertible { 
  var品种:字符串 
 变量名称:字符串 
 变量年龄:整数 
  var color:字符串 
  var说明:字符串{ 
 返回“年龄:\(年龄)” 
  } 
  } 

请记住,自定义字符串可转换具有内置的description属性,我们可以将其设置为所需的任何属性。 (如果将您的类或结构设置为Custom String Convertible,并且包含描述 ,则编译器将引发“不符合”错误-因此,很幸运,无法将其弄乱!)根据年龄,我们真正关心的只是年龄变量。 因此,这是我要介绍的唯一内容……结果非常干净!

  sortDogs() 
  // [年龄:9岁,年龄:5岁,年龄:2岁] 

是的,狗已经正确分类了! 使用Custom String Convertible,读取输出要容易得多。

希望您已经找到了这方面的知识,并希望尽快在您的代码中实现自定义字符串可转换,以便于阅读!

有关 “自定义字符串可转换”的更多信息 ,请查阅Apple文档。

谢谢阅读!