Swift part12

■ このスレッドは過去ログ倉庫に格納されています
2018/10/29(月) 22:08:16.87ID:gm+ugNlu0
!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
86デフォルトの名無しさん (ワッチョイ 6502-Prtq)
垢版 |
2019/04/19(金) 08:43:13.18ID:TxABBsFf0
OS側の問題。
そんなに長くコンパイルするなら、スリープ機能等はオフにする。
2019/04/19(金) 08:56:47.58ID:PuGTBcz20
>>86
ありがとうございます、スリープはオフにしてるのですが、もしかして画面がオフになるのもダメなのかしら
88デフォルトの名無しさん (ワッチョイ 928c-K2JC)
垢版 |
2019/04/19(金) 08:59:11.63ID:UPSvai8f0
それは無関係でしょう。
何回試行したの?
2019/04/19(金) 09:05:41.49ID:PuGTBcz20
一回の処理が30秒ほど、これを3000回ほど繰り返しています。
今朝確認したら止まっていたので、朝の用意してる時にもう一度だけ試しましたが、30分後にかくにんしたら(画面はオフ)またも止まっていました
2019/04/19(金) 09:10:34.80ID:PuGTBcz20
要所にはprintでコンソールに進捗が分かるようにコメント出してるのですが、どうもasync内の処理に入ってから止まってるような感じです。
ヒントだけでも良いのですが>< 心が折れそう
91デフォルトの名無しさん (ワッチョイ 928c-K2JC)
垢版 |
2019/04/19(金) 09:23:02.08ID:UPSvai8f0
30分程度で確認に入れるなら画面オフにしないで試してみたら?
切り分けて潰していかないと
92デフォルトの名無しさん (ワッチョイ 928c-K2JC)
垢版 |
2019/04/19(金) 09:24:27.59ID:UPSvai8f0
あ。
ビルド中に止まってるって話じゃないのか。
すみません。
93デフォルトの名無しさん (ワッチョイ 928c-K2JC)
垢版 |
2019/04/19(金) 09:25:43.46ID:UPSvai8f0
メモリーリークは?
2019/04/19(金) 09:42:40.71ID:EB/Z3yYvM
会社でたのでIDかわりました

>>92
画面オフにせずに数試してみます、私の書き方も変ですよねごめんなさい
>>93
メモリリークは分かりません、そういえば実行時に70Mbほどですが、処理が進むにつれて増えていきます。
95デフォルトの名無しさん (ワッチョイ 928c-K2JC)
垢版 |
2019/04/19(金) 09:58:09.31ID:UPSvai8f0
僕はiOS畑でmacOSでの開発経験は無いけど、クロージャー内での相互強参照には注意してます。
廃棄される事のないオブジェクトのプロパティをクロージャーにキャプチャしてないでしょうか。
2019/04/19(金) 10:56:31.11ID:Tu1+OCMX0
またもやIDかわりました。
>>95
初めて本格的に書いているので見当違いな事を言ってるかも知れませんが、変数を宣言する時にweakを付けたりはしていないです。
強参照や弱参照も疑ってみます
2019/04/19(金) 10:58:45.87ID:Tu1+OCMX0
書いていて気付きましたが
メインスレッドとサブスレッドでクラス外の変数にそれぞれアクセスしています、順番は合っていますが(前後しません)ループ終わりに初期化したりするほうが良いですか?代入から参照を繰り返しています
98デフォルトの名無しさん (ワッチョイ 928c-K2JC)
垢版 |
2019/04/19(金) 12:09:11.98ID:UPSvai8f0
クロージャーは実行時点での変数などを内部に保持しますので、他のオブジェクトのプロパティやメソッドをクロージャーで実行する際には相互強参照を起こさない様、注意が必要です。
ライフサイクル内で破棄される事のないviewなどは要注意ですね。
変数宣言時というより、クロージャーにキャプチャリストを置いて対処します。
{[weak self] in self?.anyMethod()}
といった書式です。
2019/04/21(日) 01:30:21.36ID:iFSUeFmu0
構造体のプロパティに全部初期値を与えると、メンバーワイズイニシャライザが使えなくなるのはなぜなの?
イニシャライザ書くのめんどくさいよ。

くそ仕様なのでは?
2019/04/21(日) 01:32:58.67ID:iFSUeFmu0
>>99 は defaultイニシャライザが定義されてるから、メンバーワイズイニシャライザが消えたってことはわかるけど、なぜこの仕様なのかがわからない。

メンバーワイズイニシャライザを使えなくするのが疑問。
2019/04/21(日) 11:36:42.98ID:b6xf/OvP0
xcodeに関する話題はどこか別スレ有りますか?
部品の探し方とかコードとの関連付けとか、ハウツーサイト見ても何の為にやってるのか理解できなくて。
2019/04/21(日) 12:05:11.84ID:pCSfgkO00
>>72
>文法も結構習得した
と思ったたら

>>73
のようにまたリセットするのがswift
1年に一回
知識入れ替え

今までのソース全部メンテ

コンバートしても
エラーと警告が大量にでていらない仕事のオンパレード
2019/04/21(日) 13:08:05.97ID:uR3YTCI+0
Xcode part15
http://egg.5ch.net/test/read.cgi/mac/1552999170/
2019/04/22(月) 02:31:27.06ID:SWJDNqxR0
新MC板だったか,有り難う。
2019/04/23(火) 14:13:15.43ID:FQZTVnj/0
>>85 の質問をさせてもらったのですが、ご報告です。
Macのスリープ"しない"
ディスプレイのスリープ"しない"
スクリーンセーバ"開始しない"
この状態で実行すると止まらずに動いております。
問題の切り分けを進めたいのですがヒントが有れば教えて欲しいです。

作っているAppでdispatch.queue.mainを使用してラベルやインジケータを更新しているのですが、Macがスリープや画面オフ、またはスクリーンセーバ開始で問題は出るのでしょうか?
106デフォルトの名無しさん (ワッチョイ 928c-w5dY)
垢版 |
2019/04/23(火) 14:29:52.93ID:eM8URmwI0
処理中にメモリー使用量が増えていくとの書き込みも有りましたが、Instrumentsを起動してAllocationsで#Persistentを確かめた感じでしょうか。
2019/04/23(火) 14:37:24.94ID:FQZTVnj/0
>>106
ありがとうございます、確認してみます
2019/04/23(火) 14:46:02.85ID:FQZTVnj/0
こ、こんなツール知らなかった!
なんか便利そうな感じです。
見た感じループ1週でチョビチョビ増えてる感じですね、データベースへの書き込み処理と読み込みかな?
問題はない感じっぽいです、このツールすごい
2019/04/23(火) 15:07:02.13ID:FQZTVnj/0
連投申し訳ありません。
ループの過程でsleep()を入れてるのですが、なんとなくこれが原因っぽいような気がしてきました
110デフォルトの名無しさん (ワッチョイ 928c-w5dY)
垢版 |
2019/04/23(火) 15:12:05.68ID:eM8URmwI0
#Persis tentは廃棄されずに存続しているオブジェクトです。もしここが増え続けている様ですと、強参照が疑われます。
また、iOSではラベルの更新などにはプロパティオブザーバーを使う事がよくあります。
プロパティ毎に、値が更新された時に実行する処理を指定できます。
var score = 0 { didSet { scoreLavel.text = “Score : \(score)”} }
といった感じです。
macOSでも同様かは解りませんが...
ご参考まで、
2019/04/23(火) 19:09:15.92ID:zVNwrrWL0
ディスプレイのスリープやスクリーンセーバでプロセスがサスペンド(?)するのはちょっと考えられないけど(もしかしてもしかして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 で いいえ
「はい」のプロセスがひとつでもあればスリープしない
2019/04/23(火) 21:16:14.40ID:d6R+4rUw0
>>111
今ちょうどIOPMAssertionCreateWithNameを追加して試そうとしていました、ありがとうございます。
またご報告します、他の原因も探してみます
2019/04/24(水) 13:25:01.92ID:mjBvBaH40
IOPMAssertionCreateWithNameを使ってNoIdleSleepを設定することで回避できたようです。
よく考えてみるとシステムがスリープになるとプロセスが止まるのは当たり前のことなのですね、気づく事が出来なくて恥ずかしいですが今後の糧とします。

皆さん本当にありがとうございました。
114デフォルトの名無しさん (ワッチョイ ff02-14KV)
垢版 |
2019/05/28(火) 01:28:52.91ID:CHSOWKq90
ここでiOSのswift playgrounds の質問して良いですか??
2019/05/28(火) 08:51:43.63ID:fThzCcyx0
>>114
それは、Xcodeスレのほうが良いかもね
2019/05/28(火) 09:39:07.03ID:twHuJAd4M
>>115
Swift PlaygroundsつてのはiPadのプログラミング教育用のアプリだよ
XCodeスレは全然違う
ここが適切かと言われるとどうかなとは思うけど
117デフォルトの名無しさん (ワッチョイ df8c-kH1c)
垢版 |
2019/05/28(火) 10:38:14.63ID:DVQuNbO80
SPgのアプリの操作や、教育シナリオについての質問だと対応したもんか困るな。
Swiftのゴードに関する質問なら全く問題無い。
118デフォルトの名無しさん (ワッチョイ df8c-kH1c)
垢版 |
2019/05/28(火) 10:39:01.20ID:DVQuNbO80
ゴードって何??
コードね。
2019/05/28(火) 12:01:34.71ID:w4zZ1fDo0
ありがとうございます!

プログラミング初心者で、初めてiPadでプログラムに触れて、すごい楽しんでいます。
ただ、今、同じ処理をするのに、エラーが出るコードとエラーが出ないちょっと違うコードの違いがわからなくて、悩んでいます。

分かっている人にはしょうもない質問かもしれないですが、自宅に帰ったら書かせていただきます!
120デフォルトの名無しさん (ワッチョイ ff02-14KV)
垢版 |
2019/05/28(火) 19:39:17.29ID:CHSOWKq90
すみません教えてください

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)
}


よろしくお願いします。
121デフォルトの名無しさん (ワッチョイ df8c-kH1c)
垢版 |
2019/05/28(火) 19:50:39.55ID:DVQuNbO80
ループ内での定数宣言は各回、改めて行われているので問題無いが、エラーが起きるコードでは同じ定数が複数回宣言されているのでエラーとなる。

なお、ループ定数のiもループ内で使用されていないので、本来はワイルドカードを使用するのが望ましい。

for _ in 1...2 {
....
}
122デフォルトの名無しさん (ワッチョイ df8c-kH1c)
垢版 |
2019/05/28(火) 19:54:00.30ID:DVQuNbO80
これなら通るでしょう。

let block = Block()
world.place(block, atColumn: 2, row: 2)
world.place(block, atColumn: 2, row: 2)
123デフォルトの名無しさん (ワッチョイ ff02-14KV)
垢版 |
2019/05/28(火) 20:17:26.95ID:CHSOWKq90
>>121
ありがとうございます!
ループ内の定数宣言について、はっきりと理解していないのですが、今後勉強します。

ループ定数iの件も今理解できないですが、ちょっと勉強します。

>>122
これも試したのですが、一個目のブロックは置かれるのですが、それが消えてから二個目のブロックが置かれてしまって結局1個しかブロックが置かれませんでした。
それも意味がわかりませんでした。。。

ちなみにこれは上手く行きました。当たり前ですが。。。
let block1 = Block()
world.place(block1, atColumn: 2, row: 2)
let block2 = Block()
world.place(block2, atColumn: 2, row: 2)
124デフォルトの名無しさん (ワッチョイ df8c-kH1c)
垢版 |
2019/05/28(火) 20:21:32.57ID:DVQuNbO80
>>123
あ、それはそう。
同じブロックを動かしてるから。
二つ置くなら、ブロックも二つ作らなきゃ駄目。
125デフォルトの名無しさん (ワッチョイ ff02-14KV)
垢版 |
2019/05/28(火) 20:35:44.65ID:CHSOWKq90
>>124
ありがとうございます!

ちょっといろいろ試して勉強します!

コード学ぼう2の配列の項目になると、すごく難しいのでまた質問させてください。。。

ありがとうございました!
126デフォルトの名無しさん (ワッチョイ df8c-kH1c)
垢版 |
2019/05/28(火) 20:38:11.70ID:DVQuNbO80
ループ内で宣言された定数blokは、一回ループすると破棄されてる。
で、次のループでまた「新たな定数として」宣言されてる。

for _ in 1...2 {
let block = Block() //定数blockが宣言され、Blockが格納された
world.place(block, atColumn: 2, row: 2) //worldがplace()を実行
} //定数blockは破棄→次のループへ
127デフォルトの名無しさん (ワッチョイ ff02-14KV)
垢版 |
2019/05/28(火) 21:03:01.13ID:CHSOWKq90
>>126
ありがとうございます!
理解できました!

それってローカルスコープって言うものと関係があるのでしょうか?

ローカルスコープ内で宣言された定数がそのループ内で下まで行って、
それで宣言されたのは消えるけど、ブロックは残る。
でまたループの最初で新たに宣言されて、同じ名前のブロックだけど、1個目のブロックとは違う2個目のブロックが作られるってことですね!

ありがとうございます!
128デフォルトの名無しさん (ワッチョイ ff02-14KV)
垢版 |
2019/05/28(火) 21:06:57.09ID:CHSOWKq90
親切にありがとうございます。

プログラム面白いです!
129デフォルトの名無しさん (ワッチョイ df8c-kH1c)
垢版 |
2019/05/28(火) 21:26:26.57ID:DVQuNbO80
>>127
スコープの話はその通り。
ブロックに関しては、その入れ物である定数が破棄された時点で同時に破棄されてる。
画面は書き換えられてないから、絵としては残ってるけど。
130デフォルトの名無しさん (ワッチョイ df8c-kH1c)
垢版 |
2019/05/28(火) 21:29:38.21ID:DVQuNbO80
知識と実験結果が繋がるとワクワクするよね。
131デフォルトの名無しさん (ワッチョイ df8c-kH1c)
垢版 |
2019/05/28(火) 22:06:12.86ID:DVQuNbO80
>>122のコードだと、スコープ内だから定数blockも、そこに格納されてるブロックも「そのまま」残ってる。
で、先ず一回めのplace()でブロックがcolumn 2, row2に置かれる。
そして、その同じブロックがまたplace()で使われて、同じ位置に置き直されてる。

だから一旦消える。
132デフォルトの名無しさん (ワッチョイ ff02-14KV)
垢版 |
2019/05/29(水) 01:28:22.62ID:n5wrmHwb0
>>129
>>131
ありがとうございます!
このブロックが消える残るの違い、分かりそうな分かってなさそうなです...

じっくり考えます!
2019/06/04(火) 04:57:26.99ID:Rl5HHtb60
楽しみですね。来ましたね。
2019/06/05(水) 09:09:04.10ID:iH0AsPg1a
SwiftUIってどうなのよ
135デフォルトの名無しさん (ワッチョイ 6a8c-WHxb)
垢版 |
2019/06/05(水) 09:37:29.67ID:bn8XLE5n0
癖になっちゃうみたいよ
136デフォルトの名無しさん (ワッチョイ 6a8c-WHxb)
垢版 |
2019/06/05(水) 11:12:50.80ID:bn8XLE5n0
手持ちのiOS向けコードをmacOS向けにビルドしてみてる。
拍子抜けするほど簡単。
iOSはスレッドの選択に寛容なのだと分かった^_^
iOSで引っ掛からなかったミスをmacOS向けだとキッチリ指摘される。
お陰でiOS向けの動作も改善できた(^^;;
137デフォルトの名無しさん (ワッチョイ 6a8c-WHxb)
垢版 |
2019/06/05(水) 21:52:24.16ID:bn8XLE5n0
神だ!

https://www.hackingwithswift.com/quick-start/swiftui
2019/06/07(金) 13:11:36.86ID:RiGAEFOd0
わりと簡単な2画面使うアプリのソース無料でかどこかに落ちてないですかね。
一通り言語の勉強は終わったので、マニュアルの課題よりちょっと上の画像扱うアプリのソースとか見てみたい
139デフォルトの名無しさん (ワッチョイ 038c-FZF1)
垢版 |
2019/06/07(金) 13:26:18.96ID:jIZKE2jv0
>>138
チュートリアルとしてはこれとか。
https://www.hackingwithswift.com/100/16
サンプルソースコードへのリンクも記事の中に有るよ。
ただし、よくあるstoryboardのセグエを使うやり方じゃ無いけど。
2019/06/08(土) 10:12:49.60ID:fLCPF3A/0
>>139
Thanks 観てみるよ
141デフォルトの名無しさん (ワッチョイ 038c-FZF1)
垢版 |
2019/06/08(土) 13:59:27.79ID:wruTQcwg0
SwiftUIはDateFormatterのロケールに未対応だね
142デフォルトの名無しさん (ワッチョイ 5a00-LWbF)
垢版 |
2019/06/18(火) 02:19:23.63ID:tbAp2v6F0
すみません、教えてください。
今とある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
ではだめでしょうか?
2019/06/18(火) 07:44:59.45ID:RRPGT4du0
>>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 = { }
144デフォルトの名無しさん (ワッチョイ 9a8c-6ILD)
垢版 |
2019/06/18(火) 09:19:46.79ID:MqxFux0r0
引数をとらないクロージャー() -> Voidとしているのに{ handler in ....}というは通らないのでは。
クロージャー内でもhandlerは使われていないし。
2019/06/18(火) 10:13:56.93ID:RRPGT4du0
すまん、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では (()) -> ()
と表示される
146デフォルトの名無しさん (ワッチョイ 9a8c-6ILD)
垢版 |
2019/06/18(火) 10:37:29.39ID:MqxFux0r0
>{ 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
これらは通る。

という事ですね。
147デフォルトの名無しさん (JP 0H7f-LWbF)
垢版 |
2019/06/18(火) 18:47:59.54ID:/CgxXLZnH
>>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()
なら、なんとなく分かりますが。
148デフォルトの名無しさん (ワッチョイ 9a8c-6ILD)
垢版 |
2019/06/18(火) 19:12:11.36ID:MqxFux0r0
変数、定数の宣言は、型が推定できるか、または明示されていることが絶対条件ですので、値を指定しない限り型を明示する必要があります。
ですので、基本的には

let 定数名: 型
var 変数名: 型

となる訳です。
この場合、値は後で代入する事になります。

定数名 = 値
変数名 = 値

この二段階を一度に行う事が可能で、

let 定数名: 型 = 値
var 変数名: 型 = 値

という書式になります。
この時、していされた「値」によって、定数(変数)の型を推定する事ができるので、型宣言を省略可能になります。

let 定数名 = 値
var 変数名: = 値

どの書き方をするかは基本的に自由です。
読み易さやメンテナンスのし易さ、その他の事情に応じて自分で判断します。
149デフォルトの名無しさん (ワッチョイ 9a8c-6ILD)
垢版 |
2019/06/18(火) 19:14:33.84ID:MqxFux0r0
修正
誤)var 変数名: = 値
正)var 変数名 = 値
150デフォルトの名無しさん (ワッチョイ 9a8c-6ILD)
垢版 |
2019/06/18(火) 19:22:36.30ID:MqxFux0r0
ざっくり書きますが、
クロージャー型宣言部分での引数、戻り値の記述、クロージャー(値)部分でのそれも、基本的には両方とも「書く」のです。

が、どちらかで書かれていれば他方は推定可能なので省略でき、更に両方で書かれていない場合は「引数も戻り値も無いのだな」と推定可能なので書式として通る

そんな感じです。
151デフォルトの名無しさん (ワッチョイ 9a8c-6ILD)
垢版 |
2019/06/18(火) 19:32:52.12ID:MqxFux0r0
ちなみに

let 定数名: 型 = 値
var 変数名: 型 = 値

この書き方には、型を「確実に」指定出来るというメリットが有ります。

値が「1.0」である時、この値を割り当てられた変数の型は
float でしょうか、それともdouble でしょうか。
どの型であるかでプログラムに不都合が起きる場合、推定に任せるわけにはいきません。
この様な場合には上記の型を明示する書式が採用されます。
2019/06/18(火) 20:04:30.62ID:RRPGT4du0
>>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]
153デフォルトの名無しさん (ワッチョイ 5a00-LWbF)
垢版 |
2019/06/19(水) 01:46:47.34ID:J6hmOODE0
>>147 です。
>>151>>152
ありがとうございました!
正直、大変失礼ながら、
こんなにちゃんと教えていただけるとは思っていなかったです。
大変感謝しております。

なるほど、なるほどの連続で、
「個人的にはトレーリングクロージャで使えるクロージャ側で指定する方が好み」
のところが全然分かりませんでしたが。w

また進化して戻ってきます!
154デフォルトの名無しさん (ドコグロ MMf7-8cV5)
垢版 |
2019/06/19(水) 18:16:34.43ID:2JA7n6eeM
Swift Playgroundsどぅょ
155デフォルトの名無しさん (JP 0H8d-F2Fz)
垢版 |
2019/06/20(木) 10:32:09.63ID:39UUBS39H
Swiftを始めてみたいんだけどMacが必要らしくてMac miniかMacbookを買おうと思ってる(高い)
こどおじだからMac miniでいいかな?

実際に開発してる者の意見を聞きたい(開発上の利便性とか速度とか)
156デフォルトの名無しさん (ワッチョイ 938c-1T9w)
垢版 |
2019/06/20(木) 10:49:25.55ID:po6GQ3Kk0
プロジェクトの規模による。
始めてみる程度ならMacBook Airでも問題無い。
サブディスプレイの有無で作業効率がかなり違うので、出来れば用意したほうが良いと思う。
実機テストにも使えるし、サブディスプレイにもなるのでiPadはお勧め。
iPadは、サブディスプレイ接続しなくても資料の表示にはかなり役立つ。
MacとiPadは相互にコピペ出来るし、その他の連携も良い。
157デフォルトの名無しさん (JP 0H8d-F2Fz)
垢版 |
2019/06/20(木) 11:49:37.55ID:39UUBS39H
>>156
ありがとう!
158デフォルトの名無しさん (ワッチョイ 938c-1T9w)
垢版 |
2019/06/20(木) 16:23:44.57ID:po6GQ3Kk0
プログラミングの学習を始める時は機材もそうだけど教材も重要。
実際に打ち込んで結果を確認しての繰り返しなんで、「次に何をやるか」のネタが尽きない事が大事。
英語にアレルギーが無ければ、↓のサイトがお勧め。
https://www.hackingwithswift.com/100/

Swiftの基礎から、そこそこ自分で組める見通しが立つ程度まで100日間のコースが組まれてる。
最新の環境に更新されているし、ソースコードを含めて全て無料。
100日間、ネタが尽きない。
2019/06/20(木) 20:21:20.75ID:z8jzk4Ul0
>>158
面白そうだけど、英語が苦手で・・・

日本語でおススメサイトないですか?
160デフォルトの名無しさん (ワッチョイ 938c-1T9w)
垢版 |
2019/06/20(木) 20:39:38.74ID:po6GQ3Kk0
日本語だと、なるべく新しい本を買うのがお勧めかな...
ネットの情報は新旧錯綜してるし、当のAppleも日本語のガイドや入門コースは更新が送れてる(^^;;
Appleの入門コース、内容は凄く良いんだけどね。無料だし。
161デフォルトの名無しさん (ワッチョイ 938c-1T9w)
垢版 |
2019/06/20(木) 20:42:51.91ID:po6GQ3Kk0
Xcode10、Swift4以上で。
2019/06/20(木) 21:42:28.43ID:JwmP4tXt0
>>159
読めないにしても
YouTubeの設定の字幕表示+自動翻訳(英語→日本語)と
ブラウザでのページ翻訳 くらいは使えるようになった方が良いと思うよ
163デフォルトの名無しさん (ワッチョイ 938c-1T9w)
垢版 |
2019/06/20(木) 21:48:41.43ID:po6GQ3Kk0
技術系の本は出てくる用語が限られてるし、下手くそな文章は別にして、大抵よく整ってるから意外と読めちゃうよね。
2019/06/20(木) 21:57:05.54ID:j+92GpxU0
英語できないとかプログラムこの先やっていく上で致命的すぎるだろ
165デフォルトの名無しさん (ワッチョイ 938c-1T9w)
垢版 |
2019/06/20(木) 22:08:45.14ID:po6GQ3Kk0
まあ、まずは取っ掛かる事だわな。
続けてりゃ、後から色々ついてくるもんだし。
166デフォルトの名無しさん (ワッチョイ 4b2d-br4T)
垢版 |
2019/06/20(木) 22:41:08.00ID:1p12e0x80
ある程度知ってるものについて英語の文献を読むのならまだしも、知らないものについてゼロから学習するのは辛いものがあるからな
2019/06/21(金) 11:59:27.29ID:2EyQTK6I0
>>154
クソおもろいで!
2019/06/21(金) 19:19:55.86ID:edwbENE20
>>164
>>166 今はオンライン辞書や翻訳もあるから、それほど恐れることはないとも言えるが、
少なくとも中学英語の副読本の物語をすらすら読める程度じゃないと辛いだろうな、
169デフォルトの名無しさん (ワッチョイ 938c-1T9w)
垢版 |
2019/06/21(金) 19:30:28.62ID:x2Q7O92u0
macOSやiOSには辞書が標準でインストールされてるし、わからない単語はその場で確認出来るしね。
全くの初学なら基本的な型や制御文、UI部品の幾つかについては日本語のテキストで学んで用語をある程度頭に入れたら、英語のテキストに取り組むと良いかもね。

いかんせん、日本語の書籍のサンプルコードは断片的でつまらないし、応用も効きにくいんだよなぁ...

ほんと、Appleの入門コース日本語版は早くアップデートすべきだと思うよ。
2019/06/22(土) 21:25:36.03ID:sInofEzLa
iOSアプリのMacへの移植、アップル重役が大幅改善を予告
やはり人間がデザインを調整する必要あり
https://japanese.engadget.com/2019/06/20/ios-mac/
171デフォルトの名無しさん (ワッチョイ 938c-1T9w)
垢版 |
2019/06/22(土) 21:31:00.60ID:dZAW+YMM0
そりゃそうだろ。
2019/06/22(土) 22:01:15.23ID:wZKOjh5O0
とりあえず「わかっている」ようなので安心したw
173デフォルトの名無しさん (ワッチョイ 938c-1T9w)
垢版 |
2019/06/22(土) 22:19:44.53ID:dZAW+YMM0
「iOSアプリをmacOSで使える様になる」「統合される」なんて言う連中が未だに居るからね。
「iPadでmacOSアプリ使える様にしろ」とかさ。
あり得ないっつーの。
174デフォルトの名無しさん (ワッチョイ f101-br4T)
垢版 |
2019/06/22(土) 23:04:03.22ID:EOmKKZcH0
>>173
Windowsで出来ているんだから、Appleでもできるだろ。
175デフォルトの名無しさん (ワッチョイ 938c-1T9w)
垢版 |
2019/06/22(土) 23:06:31.47ID:dZAW+YMM0
>>174
あれはやらかしちまったって言うんだよ。
2019/06/23(日) 02:32:49.79ID:YXbv/ovK0
Macアプリ開発への呼び水だろうな。簡単にMacアプリ作れるじゃんと思わせといてちゃんとしたアプリを作ろうと思うとどっぷりAppKitに浸かっていく流れ。
177デフォルトの名無しさん (ワッチョイ 09ad-0kke)
垢版 |
2019/06/23(日) 08:59:37.11ID:7n7bL/oO0
だってMacアプリ少なすぎて
おまえらがiOSアプリしか作らないのがあかん
178デフォルトの名無しさん (ワッチョイ 938c-1T9w)
垢版 |
2019/06/23(日) 09:34:34.59ID:eEkgfOF60
少なすぎるって事は無いだろ。
catalystの狙いはmacOSアプリを増やすというより、両環境向けのアプリを増やす事で連携を高める事だろ。
2019/06/23(日) 10:40:39.16ID:0ZLQVu140
だってmacOSよりiOS乗ってる機械の方が圧倒的に多いしな
180デフォルトの名無しさん (ワッチョイ 938c-1T9w)
垢版 |
2019/06/23(日) 11:57:38.42ID:eEkgfOF60
iOS機器はネット端末のイメージが強いから、アプリもネットサービスを利用する感覚でダウンロードされやすい。
開発者にとってはそこが魅力。
2019/06/23(日) 18:27:39.50ID:5aOx2AkLp
概念としては何度も提唱されていたMVC(モデル-ビュー-コントロール)って
プログラム実体とUIと接続部に最初から分けて実装すれば変更と移植が楽になる。
ってのを実際にやったのがジョブズが90年代にやってたNeXTで
MacOSXはそれをAppleに持って来たもの。

で、システム、アプリの基本的なつくりがそうなっているので
モバイル用にモジュール入れ替えてUIをモバイル用にした
『MacOSXの別バージョンがiOS』(だったりtvOSだったりetc)

だからプログラム実体とUIとコントロールは独立しているはずなので
「その機種用のUIに置き換えれば楽に移植できるし、システム的にそういうつくりのはずだよね?」ってのが基本。
前提が「(従来は全書き換え作り直しだけど)」って前書き入り。

Appleの前提は「違う環境じゃ違うUIや構成になるから変えなきゃね」で基礎システムできた上の主張やビジョンだけど
MSのWindows10はなんかそのあたり理解しないで「(うちは基礎システム環境ごとに全書き換えだから)全ての環境で同じものが動くようにします!」だから
さすがにありゃ「バカじゃねぇの?」としか…
182デフォルトの名無しさん (ワッチョイ 938c-1T9w)
垢版 |
2019/06/23(日) 18:52:14.66ID:eEkgfOF60
つうか、色々なサイズ重量の機種に載せるOSにデスクトップ用とタブレット用とを抱き合わせ、しかもタブレット環境の筈なのにデスクトップUIのアプリ走らせ...
支離滅裂でしょ。
当然、持ち運び不能な機種で余計なタブレットモードは有るわ、タブレットモードとは別枠で複数のUIは有るわ、タブレットでマウス必須のアプリが走るわ
当然、タブレットに最適化したアプリは増えんわ
デスクトップ用のアプリは変な風にタブレットの影響受けるわ(ここはAppleもやらかしとる)

んで、OSがそんなワケワカメなもんだから、虻蜂取らずな2in1なんてハードは出てくる(まあ、出さざるを得ないわな)わ...

ソフト屋の筈なのに、UIの作り込みやUXガン無視ってなんなん?

お陰でiPadをPCと混同する様な要望やら、OSを統合しろやら、ユーザーの要望を聞かないのは横暴だの、とんだとばっちりを食わされてる訳で。

大丈夫だとは思いつつ、いつかAppleがポリシーを曲げやしないかとハラハラするこの数年だわ。
2019/06/23(日) 21:05:04.97ID:TZygGBwZ0
ブログにでも書いてろよ
2019/06/23(日) 21:19:13.22ID:YXbv/ovK0
俺Appleはハード屋だと思ってた。
185デフォルトの名無しさん (ワッチョイ 938c-1T9w)
垢版 |
2019/06/23(日) 21:22:04.14ID:eEkgfOF60
ハード屋の方がソフトウェアの事が解ってる、またはソフト作りにポリシー持って仕事してるという皮肉
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況