【问题标题】:EXC BAD ACCESS while creating a new CharacterSet创建新字符集时 EXC BAD ACCESS
【发布时间】:2016-11-20 09:29:33
【问题描述】:

我正在尝试编写一个 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 function 是一个我已经用现有字符集测试过的函数。问题是分配let punctuationCharactersExcludingHyphen...EXC_BAD_ACCESS code=2 崩溃。

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

【问题讨论】:

    标签: swift exc-bad-access nscharacterset


    【解决方案1】:

    这对我来说似乎是一个错误。建立 any 两者的差异 CharacterSets 导致“无限”递归和堆栈溢出。 这是导致崩溃的最小示例:

    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
        }
    }
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-11-29
    • 1970-01-01
    • 1970-01-01
    • 2015-12-16
    • 1970-01-01
    • 2020-04-27
    • 1970-01-01
    相关资源
    最近更新 更多