Swift

Swift:サロゲートペア問題とバグ修正

従来OKだったものが、Xcodeのアップデートでサロゲートペア問題が発生するようになったようです。

問題は、ファイル名からファイルタイプ(拡張子)を取り出すときに起きていることがわかりました。これからサロゲートペア問題の理解をした上で、コードの修正をします。ソースコードも入れ替えます。

1. ファイルタイプ(拡張子)をチェックしているas NSStringを使った箇所でサロゲートペア問題が発生していました。次のものが一例になります。

  • wType  = (wName as NSString!).substringFromIndex(countElements(wName) – countElements(“.webarchive”))
  • ffFolder = (folderpath as NSString!).substringFromIndex( countElements(mcBaseFolderPath)+1 )

これは、filepathを渡して、返り値として①ファイルの場合はファイル名とファイルタイプ、②フォルダの場合はフォルダ名、③エラーの場合はnilを返り値とするようにしました。

func ExecGetFiletype(filepath:String)->(pFiletype:String, pFilename:String)

2. このほか、substringToIndexも同様の問題が発生する可能性があるので修正しました。対処方法は、1文字ずつ抽出してsubstringToIndex likeのメソッドとしました。何もないときはnilが返り値になります。substringTFromIndexも同様。

func ExecSubstringToIndex(pChar:String, toIndex:Int) -> String

3.ブックマークが更新されたとき、正しく内容が書き出されていませんでした。原因は、内容がnilかどうか判定している箇所が逆転していました。基本機能なので、Swiftのオプショナルを修正したときの修正ミスだろうと推測しています。

  • if xbWebView?.mainFrameDocument == nil { return false  }

参考URL :

Categories: Swift, 技術