Swift part12
■ このスレッドは過去ログ倉庫に格納されています
!extend::vvvvv
WWDC2014で発表されたAppleの新言語Swiftについて語りましょう
関連スレ
プログラミング言語Swift Part4
http://egg.2ch.net/test/read.cgi/mac/1484763495/
[SDK]iPhoneアプリ開発初心者質問箱49[touch][iPad]
https://egg.5ch.net/test/read.cgi/mac/1538778915/
Xcode part14
http://egg.2ch.net/test/read.cgi/mac/1476190499/
Swiftアンチスレ part1
http://mevius.2ch.net/test/read.cgi/tech/1458491343/
前スレ
Swift part11
https://mevius.5ch.net/test/read.cgi/tech/1498640309/
スレ立て時は1行目に「!extend::vvvvv」
VIPQ2_EXTDAT: default:vvvvv:1000:512:----: EXT was configured 処理中にメモリー使用量が増えていくとの書き込みも有りましたが、Instrumentsを起動してAllocationsで#Persistentを確かめた感じでしょうか。 こ、こんなツール知らなかった!
なんか便利そうな感じです。
見た感じループ1週でチョビチョビ増えてる感じですね、データベースへの書き込み処理と読み込みかな?
問題はない感じっぽいです、このツールすごい 連投申し訳ありません。
ループの過程でsleep()を入れてるのですが、なんとなくこれが原因っぽいような気がしてきました #Persis tentは廃棄されずに存続しているオブジェクトです。もしここが増え続けている様ですと、強参照が疑われます。
また、iOSではラベルの更新などにはプロパティオブザーバーを使う事がよくあります。
プロパティ毎に、値が更新された時に実行する処理を指定できます。
var score = 0 { didSet { scoreLavel.text = “Score : \(score)”} }
といった感じです。
macOSでも同様かは解りませんが...
ご参考まで、 ディスプレイのスリープやスクリーンセーバでプロセスがサスペンド(?)するのはちょっと考えられないけど(もしかしてもしかしてmacOSのナンかあるかもだけど)、
https://developer.apple.com/library/archive/qa/qa1340/_index.html
Listing 2 Preventing sleep using I/O Kit in Mac OS X 10.6 Snow Leopard
で、プログラムからMacのスリープやディスプレイのスリープを抑制(というかしないように)ができるよ
アクティビティモニタで状態は確認できる。「非スリープ」の項目。出てない場合はリストタイトルを右クリックで
IOPMAssertionCreateWithName で はい
IOPMAssertionRelease で いいえ
「はい」のプロセスがひとつでもあればスリープしない >>111
今ちょうどIOPMAssertionCreateWithNameを追加して試そうとしていました、ありがとうございます。
またご報告します、他の原因も探してみます IOPMAssertionCreateWithNameを使ってNoIdleSleepを設定することで回避できたようです。
よく考えてみるとシステムがスリープになるとプロセスが止まるのは当たり前のことなのですね、気づく事が出来なくて恥ずかしいですが今後の糧とします。
皆さん本当にありがとうございました。 ここでiOSのswift playgrounds の質問して良いですか?? >>114
それは、Xcodeスレのほうが良いかもね >>115
Swift PlaygroundsつてのはiPadのプログラミング教育用のアプリだよ
XCodeスレは全然違う
ここが適切かと言われるとどうかなとは思うけど SPgのアプリの操作や、教育シナリオについての質問だと対応したもんか困るな。
Swiftのゴードに関する質問なら全く問題無い。 ありがとうございます!
プログラミング初心者で、初めてiPadでプログラムに触れて、すごい楽しんでいます。
ただ、今、同じ処理をするのに、エラーが出るコードとエラーが出ないちょっと違うコードの違いがわからなくて、悩んでいます。
分かっている人にはしょうもない質問かもしれないですが、自宅に帰ったら書かせていただきます! すみません教えてください
swift playgrounds コードを学ぼう2 の 「ステージを作るー道をつなぐ」をやっています。
島の中の座標(2.2)にブロックを2個置きたいのですが、下のパターンAはエラーが出るのに、パターンBはエラーが出ません。
やろうとしてることは同じだと思うんですが、なんでパターンBは上手くいくんでしょうか??
//パターンA
//ブロックの再宣言が無効ですのエラーが出る
let block = Block()
world.place(block, atColumn: 2, row: 2)
let block = Block()
world.place(block, atColumn: 2, row: 2)
//パターンB
//問題なく2個のブロックが置かれる
for i in 1 ... 2 {
let block = Block()
world.place(block, atColumn: 2, row: 2)
}
よろしくお願いします。 ループ内での定数宣言は各回、改めて行われているので問題無いが、エラーが起きるコードでは同じ定数が複数回宣言されているのでエラーとなる。
なお、ループ定数のiもループ内で使用されていないので、本来はワイルドカードを使用するのが望ましい。
for _ in 1...2 {
....
} これなら通るでしょう。
let block = Block()
world.place(block, atColumn: 2, row: 2)
world.place(block, atColumn: 2, row: 2) >>121
ありがとうございます!
ループ内の定数宣言について、はっきりと理解していないのですが、今後勉強します。
ループ定数iの件も今理解できないですが、ちょっと勉強します。
>>122
これも試したのですが、一個目のブロックは置かれるのですが、それが消えてから二個目のブロックが置かれてしまって結局1個しかブロックが置かれませんでした。
それも意味がわかりませんでした。。。
ちなみにこれは上手く行きました。当たり前ですが。。。
let block1 = Block()
world.place(block1, atColumn: 2, row: 2)
let block2 = Block()
world.place(block2, atColumn: 2, row: 2) >>123
あ、それはそう。
同じブロックを動かしてるから。
二つ置くなら、ブロックも二つ作らなきゃ駄目。 >>124
ありがとうございます!
ちょっといろいろ試して勉強します!
コード学ぼう2の配列の項目になると、すごく難しいのでまた質問させてください。。。
ありがとうございました! ループ内で宣言された定数blokは、一回ループすると破棄されてる。
で、次のループでまた「新たな定数として」宣言されてる。
for _ in 1...2 {
let block = Block() //定数blockが宣言され、Blockが格納された
world.place(block, atColumn: 2, row: 2) //worldがplace()を実行
} //定数blockは破棄→次のループへ >>126
ありがとうございます!
理解できました!
それってローカルスコープって言うものと関係があるのでしょうか?
ローカルスコープ内で宣言された定数がそのループ内で下まで行って、
それで宣言されたのは消えるけど、ブロックは残る。
でまたループの最初で新たに宣言されて、同じ名前のブロックだけど、1個目のブロックとは違う2個目のブロックが作られるってことですね!
ありがとうございます! 親切にありがとうございます。
プログラム面白いです! >>127
スコープの話はその通り。
ブロックに関しては、その入れ物である定数が破棄された時点で同時に破棄されてる。
画面は書き換えられてないから、絵としては残ってるけど。 >>122のコードだと、スコープ内だから定数blockも、そこに格納されてるブロックも「そのまま」残ってる。
で、先ず一回めのplace()でブロックがcolumn 2, row2に置かれる。
そして、その同じブロックがまたplace()で使われて、同じ位置に置き直されてる。
だから一旦消える。 >>129
>>131
ありがとうございます!
このブロックが消える残るの違い、分かりそうな分かってなさそうなです...
じっくり考えます! 手持ちのiOS向けコードをmacOS向けにビルドしてみてる。
拍子抜けするほど簡単。
iOSはスレッドの選択に寛容なのだと分かった^_^
iOSで引っ掛からなかったミスをmacOS向けだとキッチリ指摘される。
お陰でiOS向けの動作も改善できた(^^;; わりと簡単な2画面使うアプリのソース無料でかどこかに落ちてないですかね。
一通り言語の勉強は終わったので、マニュアルの課題よりちょっと上の画像扱うアプリのソースとか見てみたい >>138
チュートリアルとしてはこれとか。
https://www.hackingwithswift.com/100/16
サンプルソースコードへのリンクも記事の中に有るよ。
ただし、よくあるstoryboardのセグエを使うやり方じゃ無いけど。 SwiftUIはDateFormatterのロケールに未対応だね すみません、教えてください。
今とあるWebサイトに載っている
プログラムの意味を一つずつ調べていまして、
let okHandler: () -> Void = { handler in
if let textField = alertController.textFields?.first {
completionHandler(textField.text)
} else {
completionHandler("")
}
}
の構文がどうなっているのか、全然分かりません。
{ handler in ・・・ からは、
引数も戻り値も無いクロージャーと思っていますが、
正しいでしょうか?
あと、
let okHandler: () -> Void = { handler in
って、
let okHandler = { handler in
ではだめでしょうか? >>142
分解して理解する
let 変数名: 型 = 値
【型】
クロージャ型の場合さらに分解して
(引数型宣言) -> 戻り値型
「引数無し」は「空のタプルを1つ」と同等として扱われる
また、Void型は空のタプル型のエイリアス
Void = ()
以下は全て同じ型「() -> ()」になる
let okHandler: () -> Void = {}
let a: (Void) -> Void = okHandler
let b: () -> () = okHandler
let c: (()) -> (()) = okHandler
let d: ((())) -> ((())) = okHandler
【値】
クロージャの場合
{引数定義 in 本体}
今回の方の場合、handlerは空のタプル型の引数となる
クロージャ型を省略するとhandlerの型が不明になりコンパイル出来ない
handlerの型を明示するか「引数定義 in」を省略すれば可能
let okHandler = { (handler:Void) in }
let okHandler = { } 引数をとらないクロージャー() -> Voidとしているのに{ handler in ....}というは通らないのでは。
クロージャー内でもhandlerは使われていないし。 すまん、Swift4からは引数型宣言とタプル型の区別が厳密化した影響で通らなくなってるな
https://github.com/apple/swift-evolution/blob/master/proposals/0110-distingish-single-tuple-arg.md
>>143を訂正
>「引数無し」は「空のタプルを1つ」と同等として扱われる
これはSwift3までで、Swift4以降は間違い
空のタプルを1つなら以下になる
let okHandler: (()) -> Void = { handler in }
let a: (Void) -> Void = okHandler
let b: (()) -> () = okHandler
let c: (()) -> (()) = okHandler
let d: ((())) -> ((())) = okHandler
let okHandler2 = { (handler:()) in }
引数無しなら引数は書けない
let okHandler3 = { }
さらにSwift4→Swift5でも型の文字列化が変更されているようで
print(type(of: { (handler:()) in } ))
が
Swift4では () -> ()
Swift5では (()) -> ()
と表示される >{ handler in ・・・ からは、
>引数も戻り値も無いクロージャーと思っていますが、
>正しいでしょうか?
正しい。但し、クロージャー内の’handler in’は現在は通らない。
>let okHandler: () -> Void = { handler in
>って、
>let okHandler = { handler in
>ではだめでしょうか?
そもそも、
let okHandler: () -> Void = { handler in
では現在は通らない。
let okHandler: () -> Void = { () in
let okHandler: () -> Void = {
let okHandler = {
let okHandler = { () in
これらは通る。
という事ですね。 >>142 です。
>>143、>>144
ありがとうございます!ほんと凄いです。
お伝えしていませんでしたが、swift3でした。
失礼しました。
油断したらまた何だったっけ?ってなりそうですが、
「タプル」「空のタプル」で検索したりして、
かなり分かりました。
let okHandler = {
でいいような・・・。
ところで、分かってきて、また疑問が湧いてきました。
// 引数と戻り値のないクロージャ
let closure = { () -> Void in print("クロージャテスト") }
closure()
let closure: () -> Void = { print("クロージャテスト") }
closure()
って、同じ意味だと思いますが、
なぜ、
let closure: () -> Void = { print("クロージャテスト") }
の形(今回質問させていただきましたクロージャー型={}の形)
なのか分かりますでしょうか?
好みの問題でしょうか?
let closure: () -> Void;
closure = { print("クロージャテスト") }
closure()
なら、なんとなく分かりますが。 変数、定数の宣言は、型が推定できるか、または明示されていることが絶対条件ですので、値を指定しない限り型を明示する必要があります。
ですので、基本的には
let 定数名: 型
var 変数名: 型
となる訳です。
この場合、値は後で代入する事になります。
定数名 = 値
変数名 = 値
この二段階を一度に行う事が可能で、
let 定数名: 型 = 値
var 変数名: 型 = 値
という書式になります。
この時、していされた「値」によって、定数(変数)の型を推定する事ができるので、型宣言を省略可能になります。
let 定数名 = 値
var 変数名: = 値
どの書き方をするかは基本的に自由です。
読み易さやメンテナンスのし易さ、その他の事情に応じて自分で判断します。 修正
誤)var 変数名: = 値
正)var 変数名 = 値 ざっくり書きますが、
クロージャー型宣言部分での引数、戻り値の記述、クロージャー(値)部分でのそれも、基本的には両方とも「書く」のです。
が、どちらかで書かれていれば他方は推定可能なので省略でき、更に両方で書かれていない場合は「引数も戻り値も無いのだな」と推定可能なので書式として通る
そんな感じです。 ちなみに
let 定数名: 型 = 値
var 変数名: 型 = 値
この書き方には、型を「確実に」指定出来るというメリットが有ります。
値が「1.0」である時、この値を割り当てられた変数の型は
float でしょうか、それともdouble でしょうか。
どの型であるかでプログラムに不都合が起きる場合、推定に任せるわけにはいきません。
この様な場合には上記の型を明示する書式が採用されます。 >>147
戻り値まで指定しているその2例だと好みの問題かな
戻り値を指定しない場合は
最後のステートメント次第で型が変わる可能性がある
func print2(_ s:String) -> Int {
print(s)
return 10
}
let closure1:() -> Void = { print2("クロージャテスト") }
let closure2 = { print2("クロージャテスト") }
closure1は () -> Void
closure2は () -> Int
---
個人的にはトレーリングクロージャで使えるクロージャ側で指定する方が好み
func arr2<T>(_ f:()->T) -> [T] { return [f(),f()] }
let a = arr2 { () -> UInt8 in 10*2 }
print(type(of: a ), a) // Array<UInt8> [20, 20] >>147 です。
>>151、>>152
ありがとうございました!
正直、大変失礼ながら、
こんなにちゃんと教えていただけるとは思っていなかったです。
大変感謝しております。
なるほど、なるほどの連続で、
「個人的にはトレーリングクロージャで使えるクロージャ側で指定する方が好み」
のところが全然分かりませんでしたが。w
また進化して戻ってきます! Swiftを始めてみたいんだけどMacが必要らしくてMac miniかMacbookを買おうと思ってる(高い)
こどおじだからMac miniでいいかな?
実際に開発してる者の意見を聞きたい(開発上の利便性とか速度とか) プロジェクトの規模による。
始めてみる程度ならMacBook Airでも問題無い。
サブディスプレイの有無で作業効率がかなり違うので、出来れば用意したほうが良いと思う。
実機テストにも使えるし、サブディスプレイにもなるのでiPadはお勧め。
iPadは、サブディスプレイ接続しなくても資料の表示にはかなり役立つ。
MacとiPadは相互にコピペ出来るし、その他の連携も良い。 プログラミングの学習を始める時は機材もそうだけど教材も重要。
実際に打ち込んで結果を確認しての繰り返しなんで、「次に何をやるか」のネタが尽きない事が大事。
英語にアレルギーが無ければ、↓のサイトがお勧め。
https://www.hackingwithswift.com/100/
Swiftの基礎から、そこそこ自分で組める見通しが立つ程度まで100日間のコースが組まれてる。
最新の環境に更新されているし、ソースコードを含めて全て無料。
100日間、ネタが尽きない。 >>158
面白そうだけど、英語が苦手で・・・
日本語でおススメサイトないですか? 日本語だと、なるべく新しい本を買うのがお勧めかな...
ネットの情報は新旧錯綜してるし、当のAppleも日本語のガイドや入門コースは更新が送れてる(^^;;
Appleの入門コース、内容は凄く良いんだけどね。無料だし。 >>159
読めないにしても
YouTubeの設定の字幕表示+自動翻訳(英語→日本語)と
ブラウザでのページ翻訳 くらいは使えるようになった方が良いと思うよ 技術系の本は出てくる用語が限られてるし、下手くそな文章は別にして、大抵よく整ってるから意外と読めちゃうよね。 英語できないとかプログラムこの先やっていく上で致命的すぎるだろ まあ、まずは取っ掛かる事だわな。
続けてりゃ、後から色々ついてくるもんだし。 ある程度知ってるものについて英語の文献を読むのならまだしも、知らないものについてゼロから学習するのは辛いものがあるからな >>164
>>166 今はオンライン辞書や翻訳もあるから、それほど恐れることはないとも言えるが、
少なくとも中学英語の副読本の物語をすらすら読める程度じゃないと辛いだろうな、 macOSやiOSには辞書が標準でインストールされてるし、わからない単語はその場で確認出来るしね。
全くの初学なら基本的な型や制御文、UI部品の幾つかについては日本語のテキストで学んで用語をある程度頭に入れたら、英語のテキストに取り組むと良いかもね。
いかんせん、日本語の書籍のサンプルコードは断片的でつまらないし、応用も効きにくいんだよなぁ...
ほんと、Appleの入門コース日本語版は早くアップデートすべきだと思うよ。 iOSアプリのMacへの移植、アップル重役が大幅改善を予告
やはり人間がデザインを調整する必要あり
https://japanese.engadget.com/2019/06/20/ios-mac/ 「iOSアプリをmacOSで使える様になる」「統合される」なんて言う連中が未だに居るからね。
「iPadでmacOSアプリ使える様にしろ」とかさ。
あり得ないっつーの。 >>173
Windowsで出来ているんだから、Appleでもできるだろ。 >>174
あれはやらかしちまったって言うんだよ。 Macアプリ開発への呼び水だろうな。簡単にMacアプリ作れるじゃんと思わせといてちゃんとしたアプリを作ろうと思うとどっぷりAppKitに浸かっていく流れ。 だってMacアプリ少なすぎて
おまえらがiOSアプリしか作らないのがあかん 少なすぎるって事は無いだろ。
catalystの狙いはmacOSアプリを増やすというより、両環境向けのアプリを増やす事で連携を高める事だろ。 だってmacOSよりiOS乗ってる機械の方が圧倒的に多いしな iOS機器はネット端末のイメージが強いから、アプリもネットサービスを利用する感覚でダウンロードされやすい。
開発者にとってはそこが魅力。 概念としては何度も提唱されていたMVC(モデル-ビュー-コントロール)って
プログラム実体とUIと接続部に最初から分けて実装すれば変更と移植が楽になる。
ってのを実際にやったのがジョブズが90年代にやってたNeXTで
MacOSXはそれをAppleに持って来たもの。
で、システム、アプリの基本的なつくりがそうなっているので
モバイル用にモジュール入れ替えてUIをモバイル用にした
『MacOSXの別バージョンがiOS』(だったりtvOSだったりetc)
だからプログラム実体とUIとコントロールは独立しているはずなので
「その機種用のUIに置き換えれば楽に移植できるし、システム的にそういうつくりのはずだよね?」ってのが基本。
前提が「(従来は全書き換え作り直しだけど)」って前書き入り。
Appleの前提は「違う環境じゃ違うUIや構成になるから変えなきゃね」で基礎システムできた上の主張やビジョンだけど
MSのWindows10はなんかそのあたり理解しないで「(うちは基礎システム環境ごとに全書き換えだから)全ての環境で同じものが動くようにします!」だから
さすがにありゃ「バカじゃねぇの?」としか… つうか、色々なサイズ重量の機種に載せるOSにデスクトップ用とタブレット用とを抱き合わせ、しかもタブレット環境の筈なのにデスクトップUIのアプリ走らせ...
支離滅裂でしょ。
当然、持ち運び不能な機種で余計なタブレットモードは有るわ、タブレットモードとは別枠で複数のUIは有るわ、タブレットでマウス必須のアプリが走るわ
当然、タブレットに最適化したアプリは増えんわ
デスクトップ用のアプリは変な風にタブレットの影響受けるわ(ここはAppleもやらかしとる)
んで、OSがそんなワケワカメなもんだから、虻蜂取らずな2in1なんてハードは出てくる(まあ、出さざるを得ないわな)わ...
ソフト屋の筈なのに、UIの作り込みやUXガン無視ってなんなん?
お陰でiPadをPCと混同する様な要望やら、OSを統合しろやら、ユーザーの要望を聞かないのは横暴だの、とんだとばっちりを食わされてる訳で。
大丈夫だとは思いつつ、いつかAppleがポリシーを曲げやしないかとハラハラするこの数年だわ。 ハード屋の方がソフトウェアの事が解ってる、またはソフト作りにポリシー持って仕事してるという皮肉 俺が>>181だが同じような長文投下した>>182は俺の話引き継いで
マイクロソフトとWindows10の話をしてるんだと思うぞw ゴメンわかりづらくて。
しかも、主に言いたかったのは最後の二文だったりするし。 >>181
> 概念としては何度も提唱されていたMVC(モデル-ビュー-コントロール)って
> プログラム実体とUIと接続部に最初から分けて実装すれば変更と移植が楽になる。
> ってのを実際にやったのがジョブズが90年代にやってたNeXTで
細かいことですが、MVCのCは「コントロール」ではなく「コントローラー」です^^;
あと、MVCは概念だけでなくNeXTよりずっと以前、1970年代終わり頃のSmalltalkで既に実装が試されています。
つまり、アラン・ケイたちが1970年代を通じて開発したダイナブックの暫定OSですね。
念のため、ケイたちのSmalltalkは暫定ダイナブックのOSとしては販売されませんでしたが
開発環境の「Smalltalk-80」としてLisaや旧Macより前に製品化されそこに古典的MVCも組み込まれています。
▼ジョブズが観た当時のアラン・ケイたちの暫定ダイナブックOS(Smalltalk-76)
https://commons.wikimedia.org/wiki/File:Smalltalk-76.blowup.png
ちなみにこのSmalltalk環境のGUIを1979年に観たジョブズがGUIという表層だけ真似てLisa/旧Macを作り
その後Appleを追い出されてから、ネットワークとOOPを追加して改めて真似て作ったのがNeXTです。
▼PARC訪問とNeXTの成り立ちに関連するジョブズの証言
https://vimeo.com/31813340#t=55m (55分あたりから)
▼↑の部分を書き起こしたもの
http://web.archive.org/web/20121016134054/http://americanhistory.si.edu/collections/comphist/sj1.html#soft Swiftのスレなんだが
土日のレスがまとめてスレチにしか見えん プログラマーとしてのポリシーに関わる問題だから、あながちスレチとも言えない。 混乱しています。教えて下さい。
UnsafeMutableRawPointerに対してmemcpy上書きした場合に
copyonwriteされないという理解で良いでしょうか。
あちこちググりまくりましたが、SwiftにおけるunmanagedとUnsafeの使い分けが理解できていません。 >>194
Unmanagedの先はAnyObject (型情報や参照カウンタ等を持っている)
UnsafePointerはただのポインタ値でその先が何かを関知しない
もちろんmemcpyにCopyOnWriteなんて処理は入っていない
SwiftのArrayやDictionaryがCopyOnWriteするのは
各メソッドがそうするように実装されてるから コメントありがとうございます。
UnmanagedはあくまでAnyObjectを指すという考え方がわかりやすいです。
ポインタ操作ではCopyOnWriteされないのでホッとしました。 Swiftと言うかxcodeなんですが、どなたかお解りになる方はお教え下さい。
複数の画面を移動して、ほぼ同じ処理、音を出すアプリを作っています。
画面Aはボタンから
@IBAction func HameMinor(_ sender: Any) {
let soundUrl = Bundle.main.url(forResource: "HameMinor", withExtension: "mp3")
var soundId: SystemSoundID = 0
AudioServicesCreateSystemSoundID(soundUrl! as CFURL, &soundId)
AudioServicesPlaySystemSoundWithCompletion(soundId) {
}
}
で音は出ますが、画面Bも同じく
@IBAction func HameHarm(_ sender: Any) {
let soundUrl = Bundle.main.url(forResource: "HameHarm", withExtension: "mp3")
var soundId: SystemSoundID = 0
AudioServicesCreateSystemSoundID(soundUrl! as CFURL, &soundId)
AudioServicesPlaySystemSoundWithCompletion(soundId) {
}
}
としても音が鳴りません。どうしたら良いでしょうか? HameHarm.mp3に問題が有るか、ここに挙げてある以外のコードに問題が有るかのどちらか >>199
ありがとうございます。
他にも沢山のmp3ファイルがあって、複数試しているのですが、別画面だけダメなんです。
何か別画面への定義とかあるんでしょうかね…? 同一のコードだけを並べて見せられても前記の答えしか出てこないよ。
同じものは何度見直しても同じだし、検証して確かに問題無いと言える筈の箇所は幾ら疑っても問題解決には繋がらない。
他の部分、他の理由に当たるべき。 >>201
ありがとうございます。
そうですよね、「定義が無い」エラーを消して動かして原因を探っていましたが、判りません。
ググってもそれらしいのは出てきません。頑張って探してみます。
画面移行のボタンは正常に動くのになんでだろ… >>202
soundUrlを検証
おそらくおかしな値になってると思う storyboardとibactionが連結されてないだけじゃね? >>203
Bundle.main.urlの部分でしょうか? コピペで音源名だけ変えました。
>>204
あ、それどうやってやりますか? 定義や連結だと薄々思っています。
いずれ、ありがとうございます。希望が持てます! ■ このスレッドは過去ログ倉庫に格納されています