我试图将斯威夫特书中的“矩阵”示例移植到通用.
这是我到目前为止
struct Matrix<T> { let rows: Int,columns: Int var grid: T[] init(rows: Int,columns: Int,repeatedValue: T) { self.rows = rows self.columns = columns grid = Array(count: rows * columns,repeatedValue: repeatedValue) } func indexIsValidForRow(row: Int,column: Int) -> Bool { return row >= 0 && row < rows && column >= 0 && column < columns } subscript(row: Int,column: Int) -> T { get { assert(indexIsValidForRow(row,column: column),"Index out of range") return grid[(row * columns) + column] } set { assert(indexIsValidForRow(row,"Index out of range") grid[(row * columns) + column] = newValue } } }
注意,我不得不通过repeValue:T到构造函数.
在C#中,我会使用default(T),对于数字将为0,对于booleans为false,对于引用类型为null.我明白Swift不允许在非可选类型上使用,但如果传递一个显式参数是唯一的方法,或者如果我有一些等同于默认值(T)的话,我仍然很好奇.
没有. Swift强制您指定默认值,就像处理变量和字段一样. Swift有一个默认值的概念的唯一情况是可选类型,其中nil(Optional.None).