gpt4 book ai didi

swift - EXC BAD ACCESS 同时创建一个新的 CharacterSet

转载 作者:搜寻专家 更新时间:2023-11-01 05:35:48 24 4
gpt4 key购买 nike

我正在尝试编写一个 slugging 函数,该函数涉及删除连字符以外的所有标点符号。我认为最好的方法是创建一个新的 CharacterSet,如下所示:

import Foundation

extension CharacterSet {

func subtracting(charactersIn string: String) -> CharacterSet {
let unwantedCharacters = CharacterSet(charactersIn: string)
return self.subtracting(unwantedCharacters)
}


}

let punctuationCharactersExcludingHyphen = CharacterSet.punctuationCharacters.subtracting(charactersIn: "-")

<#slug function using punctuationCharactersExcludingHyphen#>

其中 slug 函数 是我已经用现有字符集测试过的函数。问题是赋值 let punctuationCharactersExcludingHyphen...EXC_BAD_ACCESS code=2 而崩溃。

我注意到大多数涉及此错误的问题都是由某些特定的语法错误或类似错误引起的,但我无法在此处找到它是什么。有什么想法吗?

最佳答案

在我看来这像是一个错误。建立任何两者的差异CharacterSet 导致“无限”递归和堆栈溢出。这是导致崩溃的最小示例:

let cs1 = CharacterSet.punctuationCharacters
let cs2 = CharacterSet.decimalDigits
let cs = cs1.subtracting(cs2)

解决方法是使用

public mutating func remove(charactersIn string: String)

CharacterSet 的方法:

var punctuationCharactersExcludingHyphen = CharacterSet.punctuationCharacters
punctuationCharactersExcludingHyphen.remove(charactersIn: "-")

或者如果你想要一个扩展方法:

extension CharacterSet {
func subtracting(charactersIn string: String) -> CharacterSet {
var cs = self
cs.remove(charactersIn: string)
return cs
}
}

关于swift - EXC BAD ACCESS 同时创建一个新的 CharacterSet,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40702492/

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