小编Dáv*_*tor的帖子

在uitableView中删除行时,ios应用程序崩溃

我的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)

uitableview ios swift

1
推荐指数
1
解决办法
847
查看次数

Swift 4.2:类型'T'不符合协议'可解码'

我有一个函数调用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)

我试图谷歌搜索消息,但现在没有任何成功.有什么建议可以解决这个问题吗?

generics json swift codable

1
推荐指数
1
解决办法
2396
查看次数

如何解码具有多个在 Swift 中未命名的列表的 JSON

我正在尝试解码一个 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)

arrays json struct swift codable

1
推荐指数
1
解决办法
899
查看次数

如何将类作为参数传递给Swift中的函数?

让我们考虑一下我有两个不同的类.

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)

swift

1
推荐指数
1
解决办法
733
查看次数

如何快速交换任何类型的两个变量而不使用第三个变量?

我知道如何像下面那样交换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)

但是,如何在不使用第三个变量的情况下交换任何其他类型的两个变量呢?

swift

1
推荐指数
1
解决办法
115
查看次数

如何隐藏几个按钮是按钮数组?

如何在按钮数组中隐藏多个按钮?我需要这样做:如果问题的数量少于按钮数组,那么应该隐藏具有附加功能的按钮。

@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)

uibutton ios swift

1
推荐指数
1
解决办法
155
查看次数

将 Realm 的 List&lt;MyType&gt; 转换为普通集合或数组

我有领域列表,其类型为:

List<MyType>...现在,如果我做这样的事情:

myList.map{$0}我得到类似的东西:

 LazyMapSequence<List<MyType>, MyType>
Run Code Online (Sandbox Code Playgroud)

但我只想得到结果[MyType]

如何得到一个正常的 Swift 数组作为结果?

realm swift realm-list

1
推荐指数
1
解决办法
704
查看次数

如何在不损失精度的情况下解码 NSDecimalNumber?

有没有办法告诉 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 的斗争被记录在了所有的地方,特别是在这里:

使 NSDecimalNumber 可编码

nsdecimalnumber swift codable jsondecoder

1
推荐指数
1
解决办法
266
查看次数

在 Swift 中创建具有两种变量类型的二维数组数组

您可以使用以下命令快速创建一种类型变量的二维数组:

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]]'

如何创建一个数组数组,每个数组都有一个字符串和一个浮点数?

arrays multidimensional-array swift

1
推荐指数
1
解决办法
2539
查看次数

如何在 Swift 中从 Error 转换为 CFError?

遇到 type 错误时Error,我发现在CFErrorXcode 不发出警告或编译错误的情况下将其转换为特别棘手。有人遇到过这个问题吗?

(使用 Xcode 11.0 和 Swift 5)

在此输入图像描述

在此输入图像描述

swift

1
推荐指数
1
解决办法
816
查看次数