2016-11-20 47 views
1

我正在嘗試編寫一個slugging函數,它涉及除去連字符之外的任何標點符號。我認爲這樣做是創建一個新的CharacterSet如下的最佳方式:創建一個新的CharacterSet時出現EXC BAD ACCESS

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崩潰。

我注意到涉及這個錯誤的大多數問題都是由一些特定的語法錯誤或類似的引起的,但我無法找到它在這裏。有任何想法嗎?

回答

0

這看起來像一個bug給我。建立差異任意兩個 CharacterSet s導致「無限」遞歸和堆棧溢出。 下面是一個小例子,這將導致崩潰:

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

一種解決方法是使用CharacterSet

public mutating func remove(charactersIn string: String) 

方法代替:

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

,或者如果你想擴展方法:

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

這個錯誤是https://bugs.swift.org/browse/SR-2503,已經在Foundation中修復:https://github.com/apple/swift/pull/5201,Corelibs-foundation即將發佈修復:https://github.com/apple/swift-corelibs-foundation/pull/680 – jtbandes