gpt4 book ai didi

ios - 应用函数时 Swift exc_bad_access

转载 作者:行者123 更新时间:2023-11-28 09:12:48 25 4
gpt4 key购买 nike

好吧伙计们,我被难住了。

所以我正在按照 this article 的思路开发一个功能性的 json 实现.一切进展顺利,但我有一个问题在 Xcode 和 Swift 的当前版本和 Beta 版本中都存在。

我的解码逻辑从左侧的 JSON 字典中获取一个参数,并使用右侧提供的解码函数,将它们与“绑定(bind)”运算符组合起来:

return AdUnitDictionary.create <^>
d["adRepeats"] >>> _JSONInt <*>
d["adStartsAfter"] >>> _JSONInt <*>
d["advertisingOn"] >>> _JSONInt <*>
d["numberOfCards"] >>> _JSONInt <*>
d["adUnitIdNonRetina"] >>> _JSONString <*>
d["adUnitIdRetina"] >>> _JSONString

绑定(bind)定义如下:

func >>><A, B>(a: Result<A>, f: A -> Result<B>) -> Result<B> {
switch a {
case let .Value(x): return f(x.value)
case let .Error(error): return .Error(error)
}
}

因此,最初,此方法尝试转换字符串并在失败时返回安全的空字符串。我以为我从我的 if-let block 中得到了 EXC_BAD_ACCESS:

func _JSONString(object: JSON) -> String {
if let object = object as? String { return object } // EXC_BAD_ACCESS
return ""
}

因为“if-let”行是调试器显示要抛出异常的地方。然而!消除该 block 并使用完全忽略其参数的函数会导致在返回时抛出异常!!

func _JSONString(object: JSON) -> String {
return "" // EXC_BAD_ACCESS
}

我唯一能理解的是应用的函数是 nil,因为参数本身在绑定(bind)的实现中被检查存在。然而,这没有意义,因为调试器在抛出异常之前使其直接进入我的目标函数。

另一个谜团是为什么数字解码成功而没有任何问题,即使它们只是具有不同类型特化的字符串解码器的副本。

有什么想法吗?

最佳答案

检查你的模式!

let object: Int? = nil
if let object = object as? String {
print("a")
} else {
print("nil")
}
// prints nil

let object: Int = 1
if let object = object as? String {
print("a")
} else {
print("nil")
}
// prints nil

关于ios - 应用函数时 Swift exc_bad_access,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28617817/

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