Swift 3 - 用于包装数组的函数
Posted
技术标签:
【中文标题】Swift 3 - 用于包装数组的函数【英文标题】:Swift 3 - Function for Wrapping an Array 【发布时间】:2018-02-04 19:34:28 【问题描述】:当我尝试学习 Swift 3 时,我正在尝试“包装元素数组”。在 Swift 3 Playgrounds 中,我能够实现包装数组的代码。当我尝试创建一个实现我的代码的函数时,我的问题出现了。
如果您使用以下代码并将其复制粘贴到 Swift 3 Playground,那么您可能会看到我正在尝试做什么。更改 selectedElement 并在右侧看到正确的 newArray。您可以为 selectedElement 交换不同的元素,并且 newArray 将相应地更改。
我注意到我尝试将其转化为函数的失败尝试之一。
import UIKit
let myArray = ["a", "b", "c", "d", "e"]
let selectedElement = "a"
//func arrayWrapper(inputArray: Array<String>) -> Array<String>
var oldArray = [String]()
var priorElements = [String]()
var newArray = [String]()
for element in myArray
if element == selectedElement || oldArray.count > 0
oldArray.append(element)
else
priorElements.append(element)
newArray = oldArray + priorElements
//return newArray
//
priorElements
oldArray
oldArray + priorElements
newArray
【问题讨论】:
【参考方案1】:您的方法效果很好。 我看到的唯一问题是您试图访问在函数范围之外的函数内部创建的变量。
//priorElements
//oldArray
//
//oldArray + priorElements
arrayWrapper(inputArray: myArray)
【讨论】:
【参考方案2】:好吧,您对这个问题的非函数式解决方案需要两个输入 - 您要包装的数组和您要包装的元素。因此,您的函数也应该有两个参数:
// note the second parameter
func arrayWrapper(inputArray: Array<String>, selectedElemented: String) -> Array<String>
var oldArray = [String]()
var priorElements = [String]()
var newArray = [String]()
for element in myArray
if element == selectedElement || oldArray.count > 0
oldArray.append(element)
else
priorElements.append(element)
newArray = oldArray + priorElements
return newArray
这里是这个函数的一个更通用的版本,作为Array
的扩展:
extension Array where Element : Equatable
func wrap(around selectedElement: Element) -> Array<Element>
var oldArray = [Element]()
var priorElements = [Element]()
var newArray = [Element]()
for element in self
if element == selectedElement || oldArray.count > 0
oldArray.append(element)
else
priorElements.append(element)
newArray = oldArray + priorElements
return newArray
// usage
myArray.wrap(around: selectedElement)
【讨论】:
以上是关于Swift 3 - 用于包装数组的函数的主要内容,如果未能解决你的问题,请参考以下文章
swift ImageFilter hold一个全局的图片处理注册器,可以注册一些图片处理函数。然后ImageFilter数据结构包装一个要处理的图片的信息,通过这个包装方便的对一个图片应用某个过滤器