Tag: 面向

Swift协议的用法-1

在上一篇文章中,我展示了使用快速扩展名进行打印的更智能方法。 并且在文章中,我敦促如果有人遇到在AnyObject上创建扩展的想法,请告知社区。 但是当我对此进行研究时,我知道这是不可能的。 但是与此同时,我很快遇到了面向协议的编程,我想可以将其用于实现我们的目标之一。 目标:我们需要避免使用与扩展方法po()相同的代码行 喜欢, 现在,使用面向协议的协议,我们可以执行以下操作, 因此,在上述类型的任何对象上都将允许使用po()。 po()的另一个优点是在同名空间中打印字典和数组,即anArrayObj.poa()或anDisctObj.pod() 今天就这些。 尝试以任何可能的方式使用扩展名,不要忘了❤️并发表评论并分享您的想法。 访问我的网站以查看到目前为止我已创建的应用程序http://www.linklyapps.in/

Swift Universe中的迭代器设计模式

(本文最初是用俄语撰写的,并在此处发布。) 迭代器是设计模式之一,通常不为程序员所注意,因为其实现细节通常嵌入在编程语言的标准库中。 但是,它也是四人帮经典著作“设计模式:可重用的面向对象软件的元素”中描述的行为模式之一。 它的理解永远不会被淘汰,甚至可能会有所帮助。 迭代器是一种提供对复合对象的所有元素(通常是容器类型,例如数组和集合)的串行访问的方法。 语言内置资源 创建一个数组: 让numbersArray = [0,1,2] …并循环遍历: 代表numbersArray { 打印(数量) } ……这是很常见的事情,尤其是对于像Swift这样的现代编程语言而言。 但是,此功能由实现Iterator设计模式基础的代码支持。 在Swift中,一种类型必须符合Sequence协议才能被for循环迭代。 除其他事项外,此协议要求具有关联的Iterator类型(必须符合IteratorProtocol )并实现结构方法makeIterator() (此类型返回此类型的特定迭代器): 协议序列{ relatedtype Iterator:IteratorProtocol func makeIterator()-> Self.Iterator //另一个要求在这里… } IteratorProtocol包含唯一的方法— next() ,该方法按顺序返回以下对象: 协议IteratorProtocol { 关联类型元素 变异func next()-> Self.Element吗? } 感觉好像很多复杂的代码,但实际上并非如此。 我们将在一段时间后确定。 例如, Array转换为Sequence (虽然不是直接,但通过协议继承链: MutableCollection继承自Collection ,而Collection继承自Sequence ),这就是为什么可以通过for循环来标识其实例的原因。 用户类型 如果我们的类型必须是可迭代的,我们该怎么办? 像往常一样,显示示例更容易。 让我们定义用于存储书本的书架的类型: 结构书{ 让作者:字符串 让标题:字符串 } […]