could not build objective-c module 'Foo' とは
SwiftからObjective-Cのライブラリを呼び出してたらビルドは成功するのだが、エラー表示が消えなかった。
could not build objective-c module 'Foo'
これはXcodeのキャッシュデータがおかしくなってるときに起きるみたい。
なので、そのキャッシュデータを消してやると良い。
手順
参考リンク
Swift. Could not build objective-c module 'Alamofire' - Stack Overflow
yukicoder - No.430 文字列検索
事前に1文字〜10文字分のすべての部分文字列をカウントしてmapに入れておいた。 なんか解説みて気づいたけど想定解とは違うのか。
signed main() { string S; int M; map<string, int> mp; cin>>S>>M; for (int i=0;i<S.size();i++){ for(int j=1;j<=10;j++){ if(S.size()-i>=j) mp[S.substr(i, j)]++; } } ll res = 0; for(int i=0;i<M;i++){ string C; cin>>C; res += mp[C]; } cout<<res<<endl; return 0; }
yukicoder - No.33 アメーバがたくさん
アメーバの分裂。 分裂が衝突しちゃうものを考慮しないといけない。 こういう問題、コンテストとかで出されたらミスしまくりそう。
signed main() { ll N,D,T; cin>>N>>D>>T; vector<ll> X(N); for(int i=0;i<N;i++) cin>>X[i]; sort(X.begin(), X.end()); // 負の値があれば全て0以上に底上げしておく if (X[0] < 0) { ll x0 = -X[0]; for(int i=0;i<N;i++) X[i] += x0; } ll ret = 0; ret += N; for(int i=0;i<N;i++){ // 左をチェック bool found = false; for(int j=i-1;j>=0;j--) { ll diff = X[i] - X[j]; if (diff % D == 0) { // 左方向への分裂は、右方向へ分裂してくるものとの衝突を考慮する ll mx_count = diff / D - 1; if (mx_count > T){ ret += min(T, mx_count - T); } found = true; break; } } if (!found) ret += T; found = false; // 右をチェック for(int j=i + 1;j < N;j++) { ll diff = X[j] - X[i]; if (diff % D == 0) { // 右方向への分裂は、初期位置にいるものとの衝突のみ考慮する ll mx_count = diff / D - 1; ret += min(T, mx_count); found = true; break; } } if (!found) ret += T; } cout<<ret<<endl; return 0; }
yukicoder - No.32 貯金箱の憂鬱
貪欲法ですね。高い紙幣・硬貨から順に使っていく。
signed main() { int L,M,N; cin>>L>>M>>N; int res = 0; # 1000円以上は全部無視 int amount = (L * 100 + M * 25 + N) % 1000; amount %= 1000; # 100円 res += amount / 100; amount %= 100; # 25円 res += amount / 25; amount %= 25; # 残りの1円 res += amount; cout << res << endl; return 0; }
yukicoder - No.11 カードマッチ
この手のものは、一旦何も考えず全部足していって、最後に余計なものをひいていくのがうまくいくかな?
set <ll> sets, setk; signed main() { ll W,H,N; cin>>W>>H>>N; for(int i=0;i<N;i++){ ll S,K; cin>>S>>K; sets.insert(S); setk.insert(K); } ll res = 0; // 1. 同じマークのもの res += H * sets.size(); // 2. 同じ数字のもの res += W * setk.size(); // 1と2で重複して数えたものをひく res -= setk.size() * sets.size(); // 手札はカウントしないのでひく res -= N; cout<<res<<endl; return 0; }
Could not cast value of type UIView to SKView
Could not cast value of type 'UIView' (0x107bcbdf8) to 'SKView' (0x10649bad0). (lldb)
SpriteKitではじめる2Dゲームプログラミング Swift対応の第三章を進めていたらいきなりエラーが発生した。 これは実際にオブジェクトがSKViewでないため、ダウンキャストに失敗して実行時エラーになってるみたい。
サポートページにアクセスすると、以下のように指定したらOKとのこと。
SpriteKitではじめる2Dゲームプログラミング Swift対応(山下佳隆 村田知常 原知愛 近藤秀彦) | 翔泳社の本
89ページ Custom Classの変更について 89ページ「クラスの変更」の「MEMO」の下の文章2~3行目に「Custom Class のClass の部分に灰色でUIView と書かれていますが、ここを「SKView」に変更します。」と記載がありますが、Custom Classの変更時には、(「SKView」がClass欄の選択肢には表示されないため)Class欄に「SKView」と手入力してください。 ただし、以下の設定を行なうことで、Class欄の選択肢に「SKView」を表示することもできます。 ★Custom Classの選択肢に「SKView」を表示する方法 以下の手順でプロジェクトにフレームワークを追加することで選択肢に表示することができます。 1. プロジェクトナビゲータ最上部のプロジェクト名(HelpNagoyaSpecialty)が書かれた部分をクリックし、プロジェクトの設定を 表示します 2. エディタ最上部のタブは「General」を選択します 3. 「Linked Frameworks and Libraries」の「+」ボタンをクリックします 4. 一覧の中より「SpriteKit.framework」を選択し「Add」ボタンをクリックします これでStoryboardに戻り、Custom Classを変更する際には「SKView」が選択肢に含まれるようになります。
SpriteKitではじめる2Dゲームプログラミング Swift対応
- 作者: 村田知常,原知愛,近藤秀彦,山下佳隆
- 出版社/メーカー: 翔泳社
- 発売日: 2015/02/27
- メディア: Kindle版
- この商品を含むブログを見る
Setting up CocoaPods master repoから進まないとき
-> % pod install Setting up CocoaPods master repo
から何も進まないときは、単にgitレポジトリが巨大すぎてかなり時間がかかっている模様。
なので、ずーっと待つといつか終わるはずです。
気になる場合は、ctrl-cなどでキャンセルしてverboseオプションつけて再度実行してみるとやっぱりgitのcloneで時間かかってるなぁというのがわかります。
-> % pod install --verbose Preparing Setting up CocoaPods master repo Cloning spec repo `master` from `https://github.com/CocoaPods/Specs.git` (branch `master`) $ /usr/local/bin/git clone https://github.com/CocoaPods/Specs.git master Cloning into 'master'...
参考リンク