あれとかこれとかそれとか

気まぐれプログラマーのブログです。簡単なことから小難しいことまで必死に勉強した内容を書き留めていきます。プログラム以外にも気になったことや面白かったことをまとめていこうと思います。

【Swift】 数値型と文字列の型変換

Int型とString型をそれぞれ n進数 に変換する方法です。

※i=Int、s=Stringとしています。

2進数 8進数 10進数 16進数
Int→String String(i,radix:2) String(i,radix:8) String(i,radix:10) String(i,radix:16)
String→Int Int(s,radix:2) Int(s,radix:8) Int(s,radix:10) Int(s,radix:16)

OK例)


ただし、String→Intへの変換の際、各進数で変換できない文字列が含まれるとエラーになりますので注意が必要です。
NG例)

2進数、8進数、10進数に"a"は存在しないのでエラーとなる。

【Swift】 シミュレーターと実機で処理を分ける

実機とシミュレーターで処理を分けたい(設定を変えたい)場合は、#if を使用して処理を分けることができます。

【Swift】 値型の引数を関数内部で変更する方法

構造体等の値型の引数持つ関数で、引数の値を変更するためには inout パラメーターを使用します。
ちなみにクラスの場合は、参照型のため、inout パラメーター不要で変更できます。

【おもちゃ】ミニバイク工作キットで遊んでみた

暇つぶしに電気屋さんに行ったら面白いものがあったので買ってみました。

それがこちら。タミヤミニバイク工作キットです。

これがですね、なんと!電池入れると自走するみたいです。この手のおもちゃは大好物なのです。

f:id:it-bothered-what-me:20160327192010j:plain

 

昔から組み立てたりするのが好きでハードにも興味があったりします。

おもちゃなので組み立ての敷居は高くないだろう!というのと表紙見た感じ、電子部品は電池ボックスとモーターくらいなのですぐ作れるんじゃない?という安易な考えのもと即購入してきました。

 

部品はこんな感じ。 

細かい部品はほとんど入っています。自分で用意する必要があるものはニッパー、ペンチ、プラスドライバー、単三電池1本です。木工用ボンドも入っていてお得な感じでした。

f:id:it-bothered-what-me:20160327192953j:plain

 

では早速作ってみましょう・・・なんということでしょう!

作るのに集中しすぎて、途中経過を撮影し忘れるという大失態。

でもまぁ多分2時間はかかりませんでした。完成品はこちらです。

f:id:it-bothered-what-me:20160327193305j:plain

 

早速走らせてみましたが、結構バランス良く自走もできていました。

ラジコンみたいに操作できたらもっと楽しく遊べるだろうなー。自分で仕組みを作ってみるのもいいですね!

 

気になった方はこちらからどうぞ。

www.amazon.co.jp

 

【Swift】plistを読み込む

Swiftでプロジェクトに登録されている plist を読み込む方法です。
コンフィグ、固定で使いたい設定などを plist に書き込んでおくことで値の管理がしやすくなりますね。

例えば以下のような内容の BarInfo.plist があるとします。

f:id:it-bothered-what-me:20160327183254p:plain

このうち、Offset と Size の値を取得します。
valueForKeyPath を使えば、Offset の X を取得する場合、Offset.X というようにパスを指定すれば plist で設定された値を取得できます。

【Swift】 NSCodingを継承した自作のクラスオブジェクトをアーカイブする

自作のクラスオブジェクトをエンコードしてNSData型に変換する方法に苦戦しました。
NSData型をデコードして自作クラスに戻すこともできます。

ただ、デコード時には、NSData型が元はどのクラスであるかをプログラマーが把握している必要があるので、
ちょっとだけ不便?に感じました。

実は何か良い方法があるかもしれません。何か良い方法があれば教えてください!

エンコード、デコードにはそれぞれ以下のクラスを使用します。

①CommonData(自作クラス)を作成します
 エンコード/デコードを実施するためにNSCodingを継承しておきます

エンコード時に呼ばれる関数です
 ここでは各メンバ変数をキー文字列と関連付けてエンコードします

③デコード時に呼ばれる関数です
 ここではキー文字列から各メンバ変数をデコードします

エンコードの確認です
 CommonData→NSData に変換します

⑤デコードの確認です
 NSData→CommonData に変換します

⑥デコード済みオブジェクトの中身が書き換えれることを確認します

自作クラスをアーカイブ
オブジェクトをアーカイブ

【Swift】 ArrayとDictionaryのネスト

Array型とDictionary型のネストのさせ方にハマりました。
データを作ったは良いが、配列の中身を確認する方法が少し難しかったのでおさらい。

データ構造:

  • section[data[item]]

①列挙体で、Dictionary型に使用するキー文字列を用意

②item(Dictionary型) を含む data(Array型) を用意

③data(Array型) を含む section(Dictionary型) を用意

④sectionからdataを辿り、itemのデータを表示

Array Dictionary 入れ子
Array 別の型 入れ子 ネスト 格納