gpt4 book ai didi

swift - 为什么使用自定义初始化程序时 `var row: Int` 的属性 `var section: Int` 和 `IndexPath` 崩溃?

转载 作者:行者123 更新时间:2023-11-28 06:10:57 25 4
gpt4 key购买 nike

有必要将属性subrow: Int 添加到IndexPath。为什么属性 row: Intsection: Int 崩溃?

import UIKit 

extension IndexPath {
init(subrow: Int, row: Int, section: Int) {
self.init(indexes: [section, row, subrow])
}
var subrow: Int {
get { return self[2] }
set { return self[2] = newValue }
}
}

let ip = IndexPath(subrow: 0, row: 1, section: 2)
print(ip.subrow == 0) // OK
print(ip.row == 1) // Crash!
print(ip.section == 2) // Crash!

最佳答案

rowsection 属性在扩展中定义UIKit 框架中的 IndexPath。他们“方便”访问器,旨在与 TableView 或 Collection View 一起使用。

从API文档可以看出,它们只能与索引路径一起使用正是两个元素:

extension IndexPath {

/// Initialize for use with `UITableView` or `UICollectionView`.
public init(row: Int, section: Int)

/// The section of this index path, when used with `UITableView`.
///
/// - precondition: The index path must have exactly two elements.
public var section: Int

/// The row of this index path, when used with `UITableView`.
///
/// - precondition: The index path must have exactly two elements.
public var row: Int
}

另请参阅 UIKit_FoundationExtensions.swift.gyb 处的源代码.

您可以改用下标方法:

let ip = IndexPath(subrow: 0, row: 1, section: 2)

print(ip[0]) // 2
print(ip[1]) // 1
print(ip[2]) // 0

关于swift - 为什么使用自定义初始化程序时 `var row: Int` 的属性 `var section: Int` 和 `IndexPath` 崩溃?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46632308/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com