2016-11-20 11 views
1

ハイフン以外の句読点を削除することを含むスラッグ機能を作成しようとしています。 slug functionは、私はすでに、既存の文字セットでテストしてみた関数である新しいキャラクタセットを作成中に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#> 

:私は次のように新しいCharacterSetを作成することですこれを行うための最善の方法を考えました。問題は、割り当てlet punctuationCharactersExcludingHyphen...EXC_BAD_ACCESS code=2でクラッシュすることです。

このエラーに関連するほとんどの問題は、特定の構文エラーなどが原因であることに気付きましたが、ここに何があるかわかりません。何か案は?

答えて

0

これは私のバグのようです。 のいずれかをとすると、 CharacterSetの結果は、「無限」の再帰とスタックのオーバーフローを引き起こします。ここ は、クラッシュの原因となる最小限の例です:

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

関連する問題