Swift:Plistに設定したDropboxキーの取り出し方

Objective-Cの2行をSwiftで実行できるようになるまで4日かかってしまいました。解決のアイデアが尽きてしまったと思ったときに解決できました。

答え:

var wPlistArray:[NSArray]   = [[ NSBundle.mainBundle().infoDictionary! ][0].objectForKey(“CFBundleURLTypes”) as NSArray] 配列抽出
var wArrayKey:[NSArray] = [wPlistArray[0].valueForKey
(“CFBundleURLSchemes”) as NSArray!] 配列抽出
var wDPKeys:String? = (wArrayKey[0] as NSArray).componentsJoinedByString(“,”)  dp-配列をStrigで抽出
var wKey:String = “”
if  countElements(wDPKeys!) > 15 {   キーの長さは15文字+制御文字
var inx  = (wDPKeys! as NSString).rangeOfString(“db-“).location db-位置
wKey     = (wDPKeys! as NSString!).substringFromIndex(inx+3)  後側抽出
var inx2 = (wKey  as NSString).rangeOfString(“\””).location  \位置
wKey     = ((wKey as NSString).substringToIndex(inx2) キーだけを抽出
}

解決のポイントになったもの:

  • Appleのキー構造を説明した表(前のブログの最後の方を参照)
  • Objective-CサンプルプログラムはNSDictionaryに展開するようになっていたが、実際にやってみると、NSArrayにしか値が入ってこなかったので、NSArrayで実装。ただし、そこに行き着くまで、両方でひとつずつ結果を比較検討。
  • NSArrayの配列[0]をStringに直す方法がわからなかったが、componentsJoinedByStringを使えばいいことが判明。
  • 文字列からキーを取り出すのに、1文字ずつチェックする方法で実装しようとしたが、String += 抽出文字でもString = String + 抽出文字でもマージがうまくいかなかった。時間があり、必要があるときにもう一度調査しなければならない。
    let wMoji = "文字を1文字ずつ取り出す"
    var wLength = countElements(wMoji)
    for var inx = 0; inx < wLength; inx++ {
        let index = advance(wMoji.startIndex, inx)
        println(wMoji[index])
    }
  • Dropboxのキーは、答えにあるように、開始位置と終了位置からsubstringFromIndexsubstringToIndexで抜き出すことにした。
  • この実装は、Dropbox実装にmustではなかったが、次の取り扱いも勉強になった。また、give upしなければ、必ず解決できることを再確認できた。しかし、NSDictionaryがうまく行かなかった点には、納得できないものがある。

NSArray
オプショナルの使い方
valueForKeyとvalueForKeyPath vs. objectForeKey

shadowをかけたい場合、<pre class="prettyprint">
と</pre>で囲めばいい。
文字サイズの指定や折り返しに気をつけないといけない。
広告