我的UITableView中有一个问题data: [(gamme: String, [(product: String, quantity: Double)])],一切正常:插入行和部分,删除行和部分,重新加载.但有时当我尝试以快速方式删除许多行时(通过滑动表格并点击( - )逐行).它会导致像屏幕截图中的崩溃一样.
这个问题很难在开发应用程序中重现.但我的客户仍然报告它.我的客户是专业人士(不是普通用户),并希望以快速的方式使用中型到大型数据.
这是我删除行的函数:
override func tableView(_ tableView: UITableView, editActionsForRowAt indexPath: IndexPath) -> [UITableViewRowAction]? {
let delete = UITableViewRowAction(style: .destructive, title: "-") { (action, indexPath) in
let cmd = self.groupedData[indexPath.section].1.remove(at: indexPath.row)
tableView.deleteRows(at: [indexPath], with: .right)
self.delegate?.didDeleteCmdLine(cmd)
if self.groupedData[indexPath.section].1.count == 0 {
self.groupedData.remove(at: indexPath.section)
tableView.deleteSections(IndexSet(integer: indexPath.section), with: UITableViewRowAnimation.right)
}
}
return [delete]
}
Run Code Online (Sandbox Code Playgroud)
为什么会这样?
这是崩溃的xcode组织者屏幕
检查是否groupedData由@Reinhard提出的主要线程以外的任何线程访问:
private var xgroupedData = [(gamme: GammePrdCnsPrcpl, [cmdline])]()
private var groupedData: [(gamme: GammePrdCnsPrcpl, [cmdline])] …Run Code Online (Sandbox Code Playgroud) 我有一个函数调用URL来接收数据作为JSON.要将JSON解码为自定义类,我使用JSONDecoder.
fileprivate func loadFlux<T>(_ typeClass: T.Type, urlCriteria url: String) -> Promise<Any> {
var dataFlux: [T]? = nil
var promise: Promise<Any>? = nil
...
let jsonData: Data = try! JSONSerialization.data(withJSONObject: data as! NSArray)
let decoder = JSONDecoder()
dataFlux = try decoder.decode([T], from: data)
...
}
Run Code Online (Sandbox Code Playgroud)
在安装最新版本的Xcode和swift 4.2之前,代码构建没有任何问题.
但现在我收到以下错误消息:Type 'T' does not conform to protocol 'Decodable'在线:
dataFlux = try decoder.decode([T], from: data)
Run Code Online (Sandbox Code Playgroud)
我试图谷歌搜索消息,但现在没有任何成功.有什么建议可以解决这个问题吗?
我正在尝试解码一个 JSON 字符串,但它似乎有多个列表,这些列表没有我可以用我的结构调用的任何名称/键。据我所知(仅凭我的一点知识)在这个 JSON 中有两个列表,我只想要第二个列表。我知道如何解码普通的 JSON,但弄清楚如何调用这个无键列表/数组令人困惑。
我试图让我的结构使用 0 或 1,具体取决于我想要的列表,作为案例名称,但这也不起作用。我真的只是对如何调用未明确命名的东西感到困惑。下面是我的 JSON 数据和代码。
这是 JSON 的一小部分:
[{
"page": 1,
"pages": 1,
"per_page": "5000",
"total": 58
},
[{
"indicator": {
"id": "NY.GDP.MKTP.CD",
"value": "GDP (current US$)"
},
"country": {
"id": "US",
"value": "United States"
},
"value": "19390604000000",
"decimal": "0",
"date": "2017"
},
{
"indicator": {
"id": "NY.GDP.MKTP.CD",
"value": "GDP (current US$)"
},
"country": {
"id": "US",
"value": "United States"
},
"value": "18624475000000",
"decimal": "0",
"date": "2016"
}]
]
Run Code Online (Sandbox Code Playgroud)
这是我的 Swift 代码:
let …Run Code Online (Sandbox Code Playgroud) 让我们考虑一下我有两个不同的类.
class A {
var something = "Hello"
}
class B {
var something = "World"
}
Run Code Online (Sandbox Code Playgroud)
现在
class C {
func request() {
//Call with class A or B it can contain any class. I can call either class A or B depending on condition
update(myClass: A or B)
}
func update(myClass:A or B ) {
print(myClass.something) //Since both class have same varaible var something so this code should work either i pass class A or B through function …Run Code Online (Sandbox Code Playgroud) 我知道如何像下面那样交换int:
var x = 5
var y = 7
x = x + y
y = x - y
x = x - y
print(x)
print(y)
Run Code Online (Sandbox Code Playgroud)
但是,如何在不使用第三个变量的情况下交换任何其他类型的两个变量呢?
如何在按钮数组中隐藏多个按钮?我需要这样做:如果问题的数量少于按钮数组,那么应该隐藏具有附加功能的按钮。
@IBOutlet var firstButton: UIButton!
@IBOutlet var secondButton: UIButton!
@IBOutlet var thirdButton: UIButton!
@IBOutlet var fourthButton: UIButton!
@IBOutlet var fifthButton: UIButton!
@IBOutlet var sixthButton: UIButton!
func generateQuestions() -> Question {
// MARK: - Questions
let questionOne = Question.init("questionOne?")
let questionTwo = Question.init("questionTwo")
// MARK: - Answers
let answerOne = Answer.init("answerOne", type: .python, nextQuestion: nil)
let answerTwo = Answer.init("answerTwo", type: .next, nextQuestion: questionTwo)
let answerThree = Answer.init("answerThree", type: .next, nextQuestion: nil)
let answerFour = Answer.init("answerFour", type: .next, nextQuestion: nil)
let asnwerFive …Run Code Online (Sandbox Code Playgroud) 我有领域列表,其类型为:
List<MyType>...现在,如果我做这样的事情:
myList.map{$0}我得到类似的东西:
LazyMapSequence<List<MyType>, MyType>
Run Code Online (Sandbox Code Playgroud)
但我只想得到结果[MyType]
如何得到一个正常的 Swift 数组作为结果?
有没有办法告诉 JSONDecoder 将传入的小数转换为字符串?
public struct Transaction: Decodable
{
public let total: NSDecimalNumber?
enum CodingKeys: String, CodingKey {
case total = "AMOUNT"
}
public init(from decoder: Decoder) throws
{
let values = try decoder.container(keyedBy: CodingKeys.self)
let total = try values.decode(Decimal.self, forKey: .total)
self.total = NSDecimalNumber(decimal: total);
}
}
Run Code Online (Sandbox Code Playgroud)
考虑当 AMOUNT 类似于 397289527598234759823475455622342424358363514.42 时会发生什么
我想使用我拥有的代码,我会得到 nonConformingFloatDecodingStrategy 异常而无法从中恢复或失去精度。
围绕愚蠢的 swift Decimal 的斗争被记录在了所有的地方,特别是在这里:
您可以使用以下命令快速创建一种类型变量的二维数组:
var array2D: [[String]] = [["hi", "bye"], ["hello", "goodbye"]]
Run Code Online (Sandbox Code Playgroud)
我想创建一个二维数组,其中第二个变量为 Float,如下所示:
var array2d2types = [[String,Float]] = [["height",1],["width",2]]
Run Code Online (Sandbox Code Playgroud)
但这给出了错误:Cannot assign to immutable expression of type '[[Any]]'
如何创建一个数组数组,每个数组都有一个字符串和一个浮点数?
swift ×10
codable ×3
arrays ×2
ios ×2
json ×2
generics ×1
jsondecoder ×1
realm ×1
realm-list ×1
struct ×1
uibutton ×1
uitableview ×1