函数(x:Tarray <string>)和函数(x:字符串数组)之间的区别是什么

时间:2017-05-23 20:40:27

标签: delphi

import UIKit import Ji class ViewController: UIViewController { @IBOutlet weak var mistarTitle: UILabel! override func viewDidLoad() { super.viewDidLoad() let mistar = Ji(htmlURL: URL(string: "https://mistar.oakland.k12.mi.us/novi/studentportal/")!) let titleNode = mistar?.xPath("//head/title")?.first print("title: \(titleNode!.content)") mistarTitle.text = titleNode!.value // Finding ID Node let bodyDivNode = mistar?.xPath("//body/div/div")?.first let idNodeNext = bodyDivNode?.nextSibling?.xPath("//div/form/div/div").first let next = idNodeNext?.nextSibling?.xPath("//table").dropFirst().first let nextTr = idNodeNext?.xPath("//tr").dropFirst().first let firstID = nextTr?.nextSibling?.xPath("td").dropFirst().first let inputID = firstID?.xPath("input").first print(inputID?.attributes) // Finding PassWord Node let firstPass = next?.children.dropFirst().dropFirst().first let firstP = firstPass?.xPath("td").dropFirst().first let inputPW = firstP?.xPath("input").first print(inputPW?.attributes) // Do any additional setup after loading the view, typically from a nib. } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() } } function(x: Tarray<String>)之间有什么区别,尤其是每种变体的缺点和优势是什么?

1 个答案:

答案 0 :(得分:9)

首先是动态数组参数,第二个是open array参数。

打开数组参数通常会给你带来好处,只需传递方括号中的值,如下所示:

foobar([x, y, z]);

从XE7开始,你也可以用更多的开销来初始化动态数组。最后,它取决于您对值的处理方式。如果你没有存储它们,那么开放数组参数通常就足够了。但是,如果要将值存储在数组中,则不能将其分配给任何动态数组参数,而必须复制值。

虽然动态数组和开放数组参数的语法相同(array of X),但它们在两个方向上都不兼容(您只能将动态数组传递给开放数组参数但不能指定打开动态数组变量的数组参数。

如果您在要通过RTTI调用的方法上使用开放数组参数,则应该考虑一件事 - 由于RTTI无法正确处理它们,因此无效 - 请参阅RSP-16317

此外TArray<X>应优先于某些显式声明的数组类型,例如TXArray = array of X,因为TAnotherXArray = array of XTXArrayTArray<T>或别名不兼容TXArray = TArray<T>始终是类型兼容的。

有关更多信息,请参阅Rudy的优秀article about open array parameters