如何避免在返回对象的辅助函数中进行不必要的初始化?

How to avoid unnecessary initialization in helper function returning an object?

我有一个名为 fileByIndex 的辅助函数。这个函数接受一个index参数,然后用这个参数找到一个已经存在的对象,并且returns这个已经存在的对象。在此过程中,代码用 var file = File() 行初始化一个对象,然后将现有对象分配给此引用。这里的初始化实际上是不必要的。我想知道是否有任何方法可以避免这种不必要的初始化和取消初始化。

我想到了 (1) 为此目的在全局上下文中创建一个虚拟 File 对象 (2) 将此虚拟对象作为 inout 参数提供给此辅助函数并返回它,但是我也觉得这不是个好办法。

有什么好的方法可以避免这种情况吗?

class File {

}

let newFile1 = File()
let newFile2 = File()
let oldFile1 = File()
let oldFile2 = File()

var newFiles = [newFile1, newFile2]
var oldFiles = [oldFile1, oldFile2]


func fileByIndex(index: Int) -> File {

    var file = File()

    if index > 0 {
        file = newFiles[index]
    } else {
        file = oldFiles[index]
    }

    return file

}

你可以像这样使用三元运算符。

func fileByIndex(index: Int) -> File {

    return index > 0 ? newFiles[index] : oldFiles[index]

}

你可以只声明变量而不给它赋值:

func fileByIndex(index: Int) -> File {

    var file: File

    if index > 0 {
        file = newFiles[index]
    } else {
        file = oldFiles[index]
    }

    return file

}

事实上,在这种情况下,file 可以声明为 let

let file: File