プログラミング言語Swift Part4 [無断転載禁止]©2ch.net
>>151
クロスプラットフォームは多かれ少なかれ面倒なところはあるさ >>152
推論させないで明示的に型を書けば早くなるでしょたぶん Swiftの型推論は初動から風呂敷を広げ過ぎた
双方向推論は含めるべきではなかった
右辺値からの推論のみにしておけば型推論に関するビルド時間はここまで掛からなかったはず let a = b( c() ) { d in e(d) }.f().g()
単方向(右辺値から)だと
・c()の戻り値型c_typeを導出
・b(c_type, func_type)の候補が一つになることをチェック
・func_typeからdを導出
・e(d)戻り値型を導出してfunc_typeと型チェック
・b(..)の戻り値型からb_type.f()を導出
・同様にfの戻り値型からg, gからaが決定
双方向だと e(*)の候補一覧からb(c_type, e_type*).f()が成立するものまで探し始める
bの引数の型が決まってない段階で
その絞り込みのためにf、さらにはgまで先読みして推論し始める
時間が掛かるだけでなくオーバーロードやエクステンションが絡んで
Ambiguousエラー出したり
LazySequence.map(..) -> LazyMapSequence<..> でなく
Sequence.map(..) -> [T] の方に間違って確定したりする Swift3で推論に問題あったケースが、知っている範囲ではSwift4で正常になったので
かなり改善されているようだけどビルド時間はさらに犠牲になってそう
コーディングの利便性のために双方向の推論に対応した結果
ビルド時間が掛かり過ぎて型を明示するようになる本末転倒 コンパイル時間が長くなっても、それを補えるぐらいコーディング時間が短縮されるなら、結果オーライだろ >>154
基本昔からほぼ全てにきちんと型定義しているが
ビルドに20〜30分も掛かる。。。
ちょっとコーディングしてビルドすると、
またそのぐらい。。。
ビルド中に編集するとカラーボールがクルクルし出すし。
コーディングする暇がなくてめちゃ困る。
筐体が死にかけていてそうなら、喜んで買い換えるが。
これもAppleの罠ではないかとかと疑心暗鬼
ちなみにMBA2013 4GBね 全ての変数定義に型を明示しても
メソッドチェーンや引数に直接ラムダを記述しているなら型推論は発生している
1ステートメント内に暗黙の型有り
let a:Int = b( c() ) { d:Int in e(d) }.f().g()
極端だけどここまでしないと型推論は多少なりとも発生する
let lm:(Int)->Int = { (d:Int) in e(d) }
let retC:Int = c()
let retB:B = b(retC, lm)
let retF:F = retB.f()
let a:Int = retF.g()
実際にはそのビルドの20分とやらの大半は
一部のボトルネックになってるコードのせいという可能性も高いし
闇雲にステートメントを細分化する必要は無いけど >>159
Pro買えば早くなるだろうけど
その前にビルド時間のボトルネックがあるか探すためにこの辺読んでみるのを勧める
https://medium.com/@johnsundell/improving-swift-compile-times-ee1d52fb9bd
-warn-long-expression-type-checking オプションとかもある 今年2018年だというのに5年前の4GのMBA使って遅いって言われてもなぁ >>148
ダートマスBASIC自体が学生にFORTRANでプログラム教えてたら
INT,DOUBLE,LONGとかの変数の種類の定義と概念で引っかかって
プログラミングの中心概念にサクッと進めないので
わざわざ数値型と文字型の二種類に変数型を固定した言語を作ったんやで。
「FOR-NEXT-STEPでSTEP0.5でも正しい回数回るようにとか苦労しましたw」と
作者がインタビューで答えててびっくりした。本当に高級言語だったんだと。
小学校のリコーダーが超高級木管楽器のプラスチックコピーだと知った時ぐらいの衝撃だったw ビルド時間はSwift 2/Xcode 8に比べりゃだいぶ早くなったと思うけどね
まあそれでもObjCだけのプロジェクトに比べりゃはるかに長いけど >>161
ありがとう。
ボトルネックになってる箇所を探してみようと思う。
素直にMBPに買い換えるべきかな。 iMac Proにしろよ
サクサクだぞ
知らんけど 「型」って言うほど重要なのか?
そもそもその出発点がおかしいんだろうな 重要だろ
整数は大きさで処理速度に影響するし、浮動小数点数はまた専用のプロセッサがある
型のちょっとした違いでアラインメントの影響とかでメモリを占める領域も違ってくるし、ひいては実行ファィルの大きさにも影響してくる
型を意識しないプログラマは半人前ですらない 型を重要と思わないプログラマって、適当にネタ選びやってる寿司職人みたいなもん >>167
個人開発だから購入する勇気が出ない。。。
>>169
同意!
swiftは型推論が売りだろうけど、後々のメンテナンス性だとか、デバッグを考えると型付しておかないと後々の収拾付かなくなるね。
早くこの問題はAppleさんに解決してもらいたい。 >>169
多分それ30年前の知識のまま固執してなぁい?
mem. 1MB とか 1MHz 動作とかw
Int型に文字列突っ込んだら例外飛ばしてくるとか旧石器時代の話でしょ? int型に文字列突っ込んでも問題ない言語とかあるのか? >>171
型を明示することでかえって可読性や保守性が悪くなる場合に省略できるようにするのが、型推論のメリットなんじゃないの?
一番読みやすく保守しやすいコードが、型推論のビルド時間の短縮の為に、読みにくく保守しにくいコードに変えなければならないなら、失敗しているということだろう >>176
int hoge = 'abcd';
まぁ文字列とは違うけど 文字列ではないな
ASCIIで表現した4バイトの数値 >>174
型推論によってBuildが遅くなるのは確かに思想と逆行していることは理解できる。
ただ型を明示することで可読性や保守性を損なっているという感覚が理解できない。
プログラミング入門者だったらまあ納得できるが >>176
int a = (int)"abcdefg";
printf((char *)a);
ってのはどう?
似たようなことして「問題なく」動いている古いプログラムもありそうだけど。 >>179
>>160の極端な例って可読性や保守性が悪くなってない?
型推論が、人間であれば文脈から自明である型を省略可能にすることで可読性や保守性を上げようとすることならば、
理想的ならば省略可能な型の記載をコンパイラの制限で記載しなければならないなら可読性や保守性を下げてることにならないか? $test = 'abc';
$test++;
print $test; -> abd
perlくそワロタ >>184
それと似たようなことは大概の言語でできるだろ 文字がコードとして表現され大小関係もあるから、当然インクリもデクリもできる バージョンコードだけ書き直してアーカイブし直したら全ファイル再コンパイルの憂き目に遭うの何とかならないの
Swift/Objective-C問わず、というかxibとかも再コンパイルされるんでスレチかもしれんが… ☆ 私たち日本人の、日本国憲法を改正しましょう。現在、
衆議員と参議院の両院で、改憲議員が3分の2を超えております。
『憲法改正国民投票法』、でググってみてください。国会の発議は
すでに可能です。平和は勝ち取るものです。お願い致します。☆☆ プログラミングはじめたばかりの初心者ですけど質問してもいいですか? fileprivate lazy var data: MyData = {
return $0
}(MyData())
( ゚д゚ ) アプリ公開手順がわかりやすいウェブサイト紹介願います swiftってDouble→Dicimalはキャストできるけど、Dicimal→Doubleはキャストできないの?
Dicimalでfmodみたいなのを使いたいけど見つからないから、Doubleに変換して計算しようと思ったんだけど…
>せっかく精度よく計算できるのに、Mathライブラリを利用するためにDouble型に変換しては意味がない。
て書いてあるサイトはあるから変換できるんだろうけど、変換のしかたがわかりません(T T) 基本的にキャストはできないぞ
Double(i)とかで作り直せ >>721
Swift playground 始めたばかりの素人ですが全クリする頃にはiOSアプリ作れるようになれますか?
自分にあった家計簿アプリがなくて作りたいと思ってます >>204
調べ続ける必要が有るけど、簡単なAppなら作る事ができるようになるでしょう macOSのAppをXcodeで作ったんだけどMac App Storeを経由せずに配布したいのよ
デベロッパープログラムにお金払わないと無理? じゃあ autoresizingMask だけで書いてみたら? CGRectの引数のoriginとは何でしょうか?
ドキュメント読んだり調べたりしたけれどはっきりとはわかりませんでした。
Creates a rectangle with the specified origin and size.
明記された原点とサイズを持つ長方形を作る
とは書いていますが、
この”原点(origin)”はその長方形”内”におけるアンカーポイントの位置のことでしょうか、
それともsuperview座標における長方形のアンカーポイントの位置のことでしょうか。
座標の系がわかんねえ
時間がある神が居たらご教示いただけたら幸いです。 >>212
CoreGraphicsでは左下、UIKitでは左上 >>213レスありがとうございます。
ただ、質問がうまくできてなかったみたいで、
聞きたかったことは、originがさすx,yはそのイメージの座標系におけるものでしょうか。
あるいは、viewの座標系におけるものでしょうか。
シミュレーターでoriginの値を色々変えてみましたが、いまいちピンと来ませんでした。 アンカーポイント(回転や拡大でのピン留め位置)はデフォルトでは中央とか
原点とアンカーポイントは別物
原点の位置は213で書いた通り
どこを0,0とするかはメソッド次第、大抵はsuperviewの原点を0,0としたもの
スクリーン原点を0,0とする場合もある
CGRectは単なる数値の入れ物 >>215,>>126
スッキリしました!
ありがとうございます
すごく助かります >>212, >>216です。
助言をいただけたおかげでとりあえずConwey's Game Of LifeをSwiftで
カタチにはできました。
https://qiita.com/TrapedInABottle/items/91635fd7eb3db6ae8a29
ただ、重い。
どこで非効率的な処理をしているか指摘していただける方はいねえがぁ。 >>218
大量描画を高速にするならMetalとかOpenGLとか使ってGPUに描かせないと。 同じ書き方してもMetalでCompute Shaderに置き換えるだけで速くなるよこの場合 どっかに差分分かりやすくまとめてくれないと追いつかない… >>225
ざっと読んだけどあんま変わってねーのな import Foundation
let dateFormatter = DateFormatter()
dateFormatter.dateStyle = .full
dateFormatter.locale = Locale(identifier: "ja_JP")
dateFormatter.calendar = Calendar(identifier: .japanese)
print(dateFormatter.string(from: Date(timeIntervalSinceNow: 60*60*24*30)))
令和まだか Result type@Swift5のuse caseが判らん。 丸2年Swift勉強してきたが(合間合間に)まだ1つもアプリリリースできてない。しかし不思議と飽きない、ところでSwift2の本があったのでそれ見てコード写して勉強してるがエラーだらけで …こんなのやるだけ無駄かな? これは意味なさそうやな…リリースする時は10個位まとめて出した方がええからとおもて時間かかるんよなぁ 先ずは何でもいいから一つ完成させろよ。
アレもコレもと手を出していると、いつまで経っても完成したものができないぞ。 丸二年勉強してて今時Swift2のテキストからコード拾ってるってちょっとどんな状態なのかイメージ出来ない。
もし英語にアレルギーなければ↓のサイトで最新バージョンで一通り勉強できるよ。無料だし
Hacking With Swift 100days of Swift
https://www.hackingwithswift.com/100 ほとんど書籍からしか勉強してなかったから そんな動画もいいね 基礎的な事から紹介されてる様だ
いまスマホだから帰ってから見るわ ありがとさん 動画は補助だね。
テキストがメイン。
効率的に記述できる技なんかも織り混ぜつつ、覚えた方が良いコードは敢えてリピートに入れずに徹底的に手で書かせてくれる。
そんな箇所を後で自分なりに書き直してみたりと、かなり美味しい。
よく考えられた教科書だよ。 アプリリリースって審査を通すがかなり大変じゃない?
大手のバグフィックスリリースも含めて、全体の通過率4割じゃなかったっけ?
そういったものを除いた新規のもののみだと通過率がかなり厳しそう。 >>234
ちょっとプログラムに興味あるけど
初学者とかでもこの人の動画大丈夫? >>238
お勧め。
動画は補助で、メインはテキスト。
全くの初学ならiBooksストアからダウンロードできる「Swiftによるアプリケーション開発:入門編」あたりをやっておくと良いかも。これ、残念ながら内容が少し古いんだけど、基本の部分は通用するし、レッスンがインタラクティブでわかりやすい。 >>239
ありがとうございます。ちょっとがんばってみます!
英語の人聞き取りやすいし1日1時間のコンセプトもすばらしい
その前に入門編みてみます 英語大丈夫なら、やはりiBooksストアからダウンロードできる「App Development With Swift」の方が内容は新しい。 >>227
なぜかPlaygroundだとダメなんだよな。
iOSアプリだったらシミュレータ、実機とも問題ない。 >>243
つXcode11(+macOS10.15) ほんとだ
PlaygroundでもmacOSだと
"令和元年7月7日 日曜日¥n"
で、iOSとtvOSだと
"平成31年7月7日 日曜日¥n"
だな
バグ報告しなされ つうか、シミュレーターのバージョンがiOS12だと平成
iOS13だと令和
これはXcode10でも11でも変わらない
playgroundはXcode10では平成
Xcode11では令和 11で治ってるならバグ報告要らんね
Bug Reporterがいつの間にかFeedback Assistantにリニューアルしてる SwiftUIはDateFormatterのロケールに未対応 バカみたいな質問だが、アプリ作る時で分からない無い時 公式のリファレンスで調べたりまたはプラグインを導入もやるのが普通なのかな?
自分は欲しい機能がありどう書けば分からなければ ググってコードをコピペして書いてるのだがこれはアホみたいな作り方で非効率なのかな? 見つけたコードを読んで理解できてるなら良いんじゃない? むしろリファレンスだけでコードを書くのはかなりの非効率
動いてる実績のあるコードをコピペしたほうが5倍ぐらい速い
どんなSDKでもサンプルコードがついてるのはそのため
ドキュメントにAPIのめちゃくちゃ細かい挙動まで記述するのは、書く側も読む側も負担が大きい
API一覧から初期化時に呼ぶべきメソッドを抽出するためには、極論全部のメソッドの解説を読まなくちゃいけなくなるし
ただ、>>250の言ってるように、コピペしてわからないところを放置しないというのは大事だと思う >>250
>見つけたコードを読んで理解
盗んだバイクで走り出すのメロディーで読める