月別アーカイブ: 2016年11月

【Swift3】配列の番号と剰余算と条件演算子?:

先日、友人の書いたSwiftのコードを見ていた。
その中でやっていることは何となく分かるが、どういう演算子(というのか?)を使っているかわからない部分があった。

やっていることは配列を順番に呼び出すため、配列の番号を1ずつ加えていって配列の最後に来たら最初に戻るというのと、
配列の番号を1つづ引いていって最初まで戻ったら最後の番号に移動するという関数です。

配列の変数はstrArray
番号を入れる変数をpositionとして、

自分が普通に考えたら、if文を使って
最初の加えていく関数は、

こんな感じで書くかな?

それを友人は

と書いていた。

調べてみると、「%」は剰余算の演算子です。
x % Y の場合xをyで割った余りが求められます。

例えば、配列strArrayに入っている要素が5つだとすると、配列の番号positionにはいるのは0,1,2,3,4となる。

positionが3の時、次の番号を求められると、(3+1)わる5 は 0あまり4で4が返される。
positionが4の時、次の番号を求められると、(4+1)わる5 で 1あまり0で0が返される。

うーむ非常にスマートに書かれている。(^_^;)

続いて1ずつ引いていく場合自分が書くと、

こんな感じかな?

それを友人は

と書いていた。

(; ・`ω・´)
なんだこれ?なんで一行で?

いろいろ調べた結果、
参考サイト
C言語の演算子について

条件演算子と言うものらしい。

a ? b : c aが真ならbが実行、aが偽ならcが実行。

つまりpositionが0であればstrArray.countから1引いたものを返す、
そうでなければpositionから1引いたものを返す

ということでやってることはif文と同じですね。

しかしスマート。

こういう書き方はふつうにC言語とか習ってる人は知ってるのかなあ?

20数年前のBASICから独学でObjective-cに飛んだ私には分からない(;´∀`)

ま、人様のコードを読むのは勉強になりますね。

【Swift3】【override】と【prepareForSegue】

UITableViewを書いててsegueで遷移する時のprepareForSegueのoverrideがエラーで困った。

Method does not override any method from its superclass
と表示される。
当然overrideしなければprepareForSegueは呼ばれない。

参考サイト
ios – swift 3 prepare(for segue: ) function broken? – Stack Overflow

なんか知らんが書き方が変わったらしい。

とゆーことでうまく行った。
うじゃうじゃ。

【Swift3】遅延処理。

何秒後に処理を遅らせたい、とゆー時には遅延処理。

Swift3になって変わったそうです。

参考サイト
Swift 3での遅延実行 – Qiita

【Swift3】【UIButton】setTitleのビミョーなアニメーション。

UIButtonに表示される文字は変更できる。

参照サイト
002 UIButtonでボタンを表示 · GitBook

こんな感じだ。

この時よく見ると?アニメーションで薄くなって消えて新しい文字が現れてくる。

これを止めてぱっぱっと変わってほしかったのだが、なんか無いか調べてみた。

参考サイト
UIButton.setAnimationsEnabled(false)

ぱっと調べた感じ、

これでアニメーションがなくなるらしい、
しかし、個別のボタンには対応してないようで、さらに縦画面から横画面へのオートレイアウトの遷移のアニメーションもなくなっていた。

使い所を考えてしまう。

【Swift3】【UIPikerView】を下からにゅっと出す。

昔の記事UIPickerViewも下から出す。 | iPhoneアプリ備忘録のSwift3版かな?

参考サイト
011 UIPickerViewで値の選択 · GitBook
閉じるボタンは前回の記事参照。

あちこちからのコピペがまるわかり。(^_^;)
一応こんな感じで。

【Swift3】キーボードに閉じるボタン。

UITextfieldやUITextViewでキーボードに閉じるボタンがほしい。

てなわけで参考サイト。
(UITextViewの)キーボードに「閉じる」ボタンを追加する – ながいものには、まかれたくない
iOSでキーボードを閉じる方法各種 – Qiita

ほぼコピペですが、Swift3でちょこっとだけ直されました。

よく使いますよね。ヽ(^。^)ノ

【Swift3】【AVSpeechSynthesizer】テキストトゥスピーチってあったよね。

昔MacでTextToSpeechってあったよねー。
懐かしい。

それはさておき、iPhoneでテキストを読ませたいと思います。

参考サイト
AVSpeechSynthesizer – AVFoundation | Apple Developer Documentation
[Swift] iOS でテキストの読み上げをする – Qiita
みんな大好きAVSpeechSynthsizerについて – Qiita
AVSpeechSynthesizer による音声読み上げ
[Swift] AVSpeechSynthesizerで読み上げ機能を使ってみる | Developers.IO

AVFoundationを使うのでインポート。
デリゲートを使うならAVSpeechSynthesizerDelegate。

読み上げ実行中かどうか
speech.isSpeaking

途中で止める場合
speech.stopSpeaking(at: AVSpeechBoundary.immediate)

【Swift3】Local and Push Notification Programming Guide ??

完成したアプリをアップロードしたが、itunesConnectで出てこない。
メールを見るとiTunes Storeからメールが来ていた。

iTunes Connect: Your app “************” (Apple ID: **************) has one or more issues
Dear developer,

We have discovered one or more issues with your recent delivery for “5TallyCounter”. Your delivery was successful, but you may wish to correct the following issues in your next delivery:

Missing Push Notification Entitlement – Your app includes an API for Apple’s Push Notification service, but the aps-environment entitlement is missing from the app’s signature. To resolve this, make sure your App ID is enabled for push notification in the Provisioning Portal. Then, sign your app with a distribution provisioning profile that includes the aps-environment entitlement. This will create the correct signature, and you can resubmit your app. See “Provisioning and Development” in the Local and Push Notification Programming Guide for more information. If your app does not use the Apple Push Notification service, no action is required. You may remove the API from future submissions to stop this warning. If you use a third-party framework, you may need to contact the developer for information on removing the API.

After you’ve corrected the issues, you can use Xcode or Application Loader to upload a new binary to iTunes Connect.

Regards,

The App Store team

ググる先生で翻訳してみた。
iTunesの接続:あなたのアプリ “************」(アップルID:**************)は、1つ以上の問題があります
親愛なる開発者、

私たちは、 ************のためのあなたの最近の配信を持つ1つ以上の問題を発見しました。あなたの配信に成功しましたが、あなたはあなたの次の配信では、以下の問題を修正したい場合があります。

プッシュ通知エンタイトルメントがありません – あなたのアプリは、Appleのプッシュ通知サービスのためのAPIが含まれていますが、APS-環境エンタイトルメントは、アプリの署名から欠落しています。これを解決するには、アプリケーションIDがプロビジョニングポータルでのプッシュ通知が有効になっていることを確認してください。そして、APS-環境エンタイトルメントが含まれて配布プロビジョニングプロファイルを使用してアプリケーションに署名します。これは、正しい署名を作成し、あなたのアプリを再送信することができます。現地で「プロビジョニングおよび開発」を参照してください詳細については、通知のプログラミングガイドを押してください。あなたのアプリがAppleのプッシュ通知サービスを使用しない場合、アクションは必要ありません。この警告を停止するには、将来の提出からAPIを除去することができます。あなたは、サードパーティ製のフレームワークを使用する場合は、APIを削除する方法については、開発者に連絡する必要があるかもしれません。

あなたが問題を修正した後、あなたは、iTunesのConnectに新しいバイナリをアップロードするのXcodeまたはアプリケーションローダーを使用することができます。

よろしく、

App Storeのチーム

アップロードは受け取ったが Local and Push Notification を使うって聞いてないよ。
なんとかしてアップロードし直してね。ってことらしい。

ちなみに、Local and Push Notification Programming Guideって所にリンクが張ってあったがnot foundだった。

しかし、ノーティフィケーションは使ってない。

色々とぐぐってみたところ、
【xcode】心当たりのない「Missing Push Notification Entitlement」は無視 …

特に使っていないなら問題無さそうだ。
たぶんFirebaseあたりが絡んでるのかなあ?

【Swift3】多言語でアプリ名。

練習用にプロジェクトを作ってやってたら公開までしちゃいそうだけどアプリ名が「FirstSwift」になってる人。
はい。私です。(^_^;)

プロジェクト名そのままではちょっと公開できない場合や、日本語や英語でアプリ名を変えたい場合のやり方です。

参考サイトは
[iOS] アプリ名を国ごと変更したい場合 – Qiita

自分用の備忘録でリンク元が消えちゃったら困る用なので、ほぼ劣化コピペです。

まず、Project > Info > Localizations にて、Japanese(ja)を追加。
【Swift3】多言語でアプリ名。

【Swift3】多言語でアプリ名。

続いてstringsファイルを作成。
【Swift3】多言語でアプリ名。
名前はInfoPlist.strings ココ重要!大文字小文字も関係するようです。
【Swift3】多言語でアプリ名。

出来たInfoPlist.stringsを選択してlocalizationでJapaneseを選択。
【Swift3】多言語でアプリ名。

あらためてlocalizationでEnglishとJapaneseにチェック。
【Swift3】多言語でアプリ名。

InfoPlist.stringsを選択してコードを書きます。
BaseがEnglishなので「InfoPlist.strings」と「InfoPlist.strings(English)」は同じ内容になります。

一回エラーで起動しませんでした。
理由はSwiftのつもりで最後にセミコロンを付けてなかったから。

忘れずにセミコロンを付けましょう。