17/01/31 10:07:32.51 Wlpmu9Pop.net
だいぶ違うし、4版が出るならまた変わってるだろうなぁ
破壊変更がないとしてもだ
なんで詳細Swiftなんて買ったと言わざるをえない
Qiitaで直近の記事を漁った方がよほど有効だろうよ
691:デフォルトの名無しさん (ワッチョイ afc9-4cPM)
17/01/31 10:44:07.96 IISx8Cj70.net
>>672
keySortedメソッドの引数
by:(Key,Key)->Bool
がよく判りません。
Key型を要素とするタプルを取ってBoolを返すclosure byって意味なんだと思いますが、Key型ってなんですか?
692:デフォルトの名無しさん (アウアウウー Sa7f-4cPM)
17/01/31 10:57:03.39 13oBEuV5a.net
タプルってw
引数を2つとってBoolを返すクロージャだろ
693:デフォルトの名無しさん (オイコラミネオ MM76-bF0B)
17/01/31 11:38:05.84 5xUQa1EZM.net
Keyはラベルです
694:デフォルトの名無しさん (ワッチョイ 833c-AZYz)
17/01/31 12:46:54.40 E6Yo5vL90.net
>>677
ジェネリクスの型パラメータ名
URLリンク(swiftdoc.org)
> struct Dictionary<Key : Hashable, Value>
extensionの中では元定義にある型パラメータ(Key, Value)や
Associated Types(Element, Indexなど)が使える
[Int:Int?] は Dictionary<Int,Int?> の糖衣構文
695:デフォルトの名無しさん (ワッチョイ afc9-4cPM)
17/01/31 14:26:38.67 IISx8Cj70.net
>>680
納得です。
ジェネリクスの型パラメータなんですね!
それでも、こう書くとコンパイルできない。なんでだ?
func keySorted(by:(Key, Key)->Bool) -> [(Key,Value)] {a, b in
return self.sorted{by(a.key,b.key)}
696:デフォルトの名無しさん (ワッチョイ 833c-AZYz)
17/01/31 14:49:05.08 E6Yo5vL90.net
>>681
1つ目の{は関数本体の始まり、2つ目の{がクロージャー
func keySorted(by:(Key, Key)->Bool) -> [(Key,Value)] {
return self.sorted {a, b in
by(a.key, b.key)
}
}
697:デフォルトの名無しさん (ワッチョイ afc9-4cPM)
17/01/31 15:12:54.62 IISx8Cj70.net
>>682
あんた!親切だなぁ。
698:デフォルトの名無しさん (ワッチョイ 1b3c-R94c)
17/01/31 22:05:26.16 Jtcmcjs90.net
プログラミング初心者でiOSアプリ作ってるけど、オススメの学習サイトある?
ドットインストールは全部やってしまった
699:デフォルトの名無しさん (アウアウウー Sa7f-4cPM)
17/01/31 22:25:58.19 cYDluZxDa.net
オススメは、raywenderlich.com やろなぁ
英語だけど
700:デフォルトの名無しさん (ワッチョイ 7fa1-+rHU)
17/01/31 22:39:58.93 BjflOzhk0.net
>>684
それより何作ったらいいかな?
701:デフォルトの名無しさん (ワッチョイ 7eba-eBhG)
17/01/31 22:59:56.23 rB3HMGuL0.net
初心者ならappleの公式ドキュメントでしばらく困らなくね?
702:デフォルトの名無しさん (ワッチョイ afc9-4cPM)
17/02/01 10:21:51.18 P9C8z9K60.net
>>687
しばらくどころか、公式ドキュメントはズゥートお世話になります。
何言ってるか?チンプンカンプンなところもあるけど。
UITableViewの2つのメソッドの使い方がよく判らん。
dequeueReusableCell, register
703:デフォルトの名無しさん (ワッチョイ afc9-4cPM)
17/02/01 10:38:50.47 P9C8z9K60.net
>>684
日本語、独学だけでiOSアプリを自在に作れる様にはなれない。
英文でしか、入手できない情報が多いから。
英語で情報取れるなら、独学でOK!
これが現実。
704:デフォルトの名無しさん (ワッチョイ aade-EfrK)
17/02/01 11:44:08.43 nI3xSAO90.net
[SDK]iPhoneアプリ開発初心者質問箱47[touch][iPad]
スレリンク(mac板)
705:デフォルトの名無しさん (スプッッ Sd6a-T3y8)
17/02/01 12:10:48.46 rrXFdmRqd.net
>>689
ちょっと違うんじゃないないかな。
Appleは、公式に日本語資料もリリースしているけれども、最終的には英語の資料を見るように書いてある。
それに、帰結すると思う。
よって
> 英文でしか、入手できない情報が多いから。
では無くて、英文で入手しなくてはならない。
> 英語で情報取れるなら、独学でOK!
これが現実。
まーこれは、正解。
その通りだね。
706:デフォルトの名無しさん (オイコラミネオ MM76-bF0B)
17/02/01 12:12:02.48 smtLVi82M.net
>>688
そのメソッドはね、セル自体を更新する時に使うよ
チェックマークをつけたり、外したり
707:デフォルトの名無しさん (ワッチョイ 13b6-UFRj)
17/02/03 09:03:28.41 QkHJCDQQ0.net
すみません。質問よろしいでしょうか。
今、macでテストアプリ作ってるんですが、
アプリ内のボタンを押したらキーボードでショートカットを入力した状態(画面切り替えの' ^← 'とか)にする方法はないでしょうか?
ご教授お願いいたします
708:デフォルトの名無しさん (ワッチョイ 7fc9-vqxm)
17/02/03 10:34:26.43 9keII8ru0.net
スレチ
709:デフォルトの名無しさん (スフッ Sd9f-4SR0)
17/02/03 12:29:41.54 REH9prgEd.net
>>552
古い話にレスつけて悪いが
この場合のdelegateはiOS/macOSのライブラリの話なので
言語の教科書には出てこない
操作対象と処理を行う所を分けるしくみの概念的な名称
勉強したければiOS/macOSのプログラミングの資料を参照するとよい
protocolはSwiftの言語仕様なのでSwift言語の教科書で説明される
共通の名称で処理を受け付けることを保証するしくみ
OSのdelegateの多くはswiftではprotocolを使って実装されている
710:デフォルトの名無しさん (ワッチョイ 13c9-kDlj)
17/02/03 12:54:13.39 OvWQoQse0.net
delegateってのは、まあ、いろんなコンテクストで出てくるから混乱するけど、
制御の逆転、っていう設計を実装する時にでてくるパターンとか、プロパティー変数だとかなんだよねぇ。
だから、言語の教科書には出てこない。Design Patternの本には出てくるかも。
教科書に出てきていても良い様な気がするけど、そんな事を上手く説明できる
著者も少ない事もあって、和文では良い説明がされているのを見た事無いなぁ。
delegateがわからんと、Framework/Libraryの違いが理解できんからね。
まあ、ここの辺りが障壁になってるから、俺みたいなおっさんでも食っていける
わけだが!
711:デフォルトの名無しさん (アウアウウー Sa07-kDlj)
17/02/03 13:07:30.01 QCj1HTOka.net
イベントドリブンになれたVBプログラマならなんとかなるやろ使うだけなら
設計する側になるとあれやろうけど
712:デフォルトの名無しさん (ワッチョイ 13b6-UFRj)
17/02/03 14:12:12.30 QkHJCDQQ0.net
>>693
スレチみたいなので他のところ行ってきます
すみませんでした
713:デフォルトの名無しさん (ワッチョイ 7f3c-6sTg)
17/02/03 15:29:58.35 p7fNNQ2Y0.net
>>695
詳解Objective-Cにはデリゲートの節があるよ
分かりにくいから役には立たないけどね
714:デフォルトの名無しさん (ワッチョイ 934e-2G09)
17/02/03 15:59:32.48 GQ++c1010.net
delegate:委譲 delegater:委譲元 delegatee:委譲先
delegaterにdelegateeの参照を持たせてコールバックしてもらう
tableViewにviewControllerの参照を持たせてcellForRowを呼んでもらう
715:デフォルトの名無しさん (ワッチョイ 934e-2G09)
17/02/03 16:02:25.45 GQ++c1010.net
間違い -> 委譲元:delegator
716:デフォルトの名無しさん (ワッチョイ 7f3c-6sTg)
17/02/03 17:13:14.47 p7fNNQ2Y0.net
細かいけど委譲はdelegation
delegateって言葉は基本的に委譲先のオブジェクトを指す言葉として使われてると思うよ
delegate == delegate object == delegatee
URLリンク(developer.apple.com)
717:デフォルトの名無しさん (スフッ Sd9f-4SR0)
17/02/03 19:50:02.27 REH9prgEd.net
最初のうちって
言語の話と、OSやライブラリの仕組みの話と、開発ツールの話が
違うってことに気付かないんだよね
でもこれに気づけないと、正しい教科書にすらたどり着けない
意外と大きな落とし穴
718:デフォルトの名無しさん (ワッチョイ 135b-C9DF)
17/02/03 20:01:45.15 j/Uvz34o0.net
>>703
自分が何を知りたいのか?が判るまで、結構時間かかる人多いね。
719:デフォルトの名無しさん (アウアウウー Sa07-kDlj)
17/02/03 20:55:42.27 MnLqnHc9a.net
以上。
720:デフォルトの名無しさん (スフッ Sd9f-4SR0)
17/02/04 15:18:45.31 EO0q2wxld.net
>>693さんは無事に目的のスレにたどり着いたかな?
自動化に主眼があるならAutomatorかAppleScript
テストに主眼があるならXCTestのUITest
あたりなんだろうけど、残念ながら詳しくは無い
721:デフォルトの名無しさん (ワッチョイ 3fb6-UFRj)
17/02/04 21:20:56.34 hsGpXHdO0.net
>>706
おおお!ありがとうございます!
applescriptをswiftで呼び出したらいいのかな?
やってみます!
722:デフォルトの名無しさん (ワッチョイ 3fb6-UFRj)
17/02/04 21:54:16.56 hsGpXHdO0.net
>>706
できました!
本当にありがとうございます!
723:デフォルトの名無しさん (ワッチョイ b333-tZqJ)
17/02/04 21:55:53.65 TiE86E8B0.net
Swiftおつ
724:デフォルトの名無しさん (ワッチョイ 7f3c-6sTg)
17/02/04 22:36:30.18 2gkSNY4M0.net
AppleScriptに比べると面倒くさいけど直接キーボードイベントを発火させる方法もあるよ
//Cmd+Tabキーの例
let tab_down = CGEvent(keyboardEventSource: nil, virtualKey: 0x30, keyDown: true)
let tab_up = CGEvent(keyboardEventSource: nil, virtualKey: 0x30, keyDown: false)
tab_down?.flags = CGEventFlags.maskCommand
tab_up?.flags = CGEventFlags.maskCommand
tab_down?.post(tap: CGEventTapLocation.cghidEventTap)
tab_up?.post(tap: CGEventTapLocation.cghidEventTap)
725:デフォルトの名無しさん (ワッチョイ ff93-4SR0)
17/02/05 11:11:41.55 vWH4gLvD0.net
>>708
なんかお役に立てたようで
ほとんど当てずっぽうだったんだけどね
可能なら、SwiftからAppleScript呼び出す辺りのコードを公開してもらえれば
他の人の参考になるかも
726:デフォルトの名無しさん (ワッチョイ 135b-vqxm)
17/02/05 11:19:54.99 DgXxXeRF0.net
>>711
import Foundation
let task = NSTask()
task.launchPath = "/usr/bin/osascript"
task.arguments = ["~/Desktop/testscript.scpt"]
task.launch()
727:デフォルトの名無しさん (ワッチョイ 7f3c-mNa5)
17/02/05 14:35:54.66 PLwA9BVe0.net
話題性の無い言語になってきたな。
スレの勢いも無くなってきてる。
一発屋だったのかこの言語。
728:デフォルトの名無しさん (アウアウウー Sa07-kDlj)
17/02/05 14:49:06.57 u0BexBI4a.net
Swift楽ですよ
Obj-Cと比べて体感的に記述量が4割減に感じますわ
729:デフォルトの名無しさん (ワッチョイ b333-kDlj)
17/02/05 15:53:34.11 nMpDa1VZ0.net
短い=可読性がよくなる
ってわけではないと聞いたことがあるのですが実際の所どうでしょうか?
730:デフォルトの名無しさん (ササクッテロリ Spa7-gHkU)
17/02/05 15:57:06.80 u0uQCFq0p.net
日本語と英語、どっちが優れている?って愚問と同じレベル
731:デフォルトの名無しさん (アウアウウー Sa07-kDlj)
17/02/05 16:34:01.05 u0BexBI4a.net
まずね、クラス一つ作る時の億劫さが違う
Obj-Cだと、ひとまずNSObject継承して、ヘッダファイルに@interface書いて、@property書いて、実装ファイルの@implementationに @synthesize書いて、イニシャライザ書いてってなるけど、
Swiftだと、
class Monster {
let name: String
var hp: Int
init(name: String, hp: Int) {
self.name = name
self.hp = hp
}
}
って感じでバッバッとスクリプト感覚で定義できるから、思考を極力止めないでコーディング出来る
構造体だとイニシャライザも自動生成なのでさらに楽
struct Monster {
let name: String
var hp: Int
}
Obj-Cと比べて記述量が圧倒的に有利
今じゃ残業もなくなってObj-Cプログラマを横目に定時に帰って彼女とイチャイチャしてます。
もっと早くやっとけばよかった・
732:デフォルトの名無しさん (ワッチョイ 135b-vqxm)
17/02/05 17:09:05.45 DgXxXeRF0.net
>>717
Obj-Cってあんまり書いた事無いので参考になりました。
詳解Obj-Cってのを中古本で買って、ペラペラやった位なので、
ほんとご意見参考になりました。
733:デフォルトの名無しさん (ワッチョイ 037b-eX/G)
17/02/05 17:13:01.45 iKJkAlzP0.net
>>713
お前さんみたいな荒らしの勢いが落ちてるって、それ一番言われてるから
Apple信者 vs Appleアンチ: betaから1.x
Swiftユーザ vs ObjC信者: 2.x
Swiftユーザ vs C++ユーザ: 3.0前後
beta以来、こんな対抗煽りがあったけどC++煽りが通用しなくなってきて勢い落ちてる
そろそろ vs 新興言語(Rust, Go)で荒らす時期なんじゃないの?(助言
734:デフォルトの名無しさん (ワッチョイ b333-kDlj)
17/02/05 17:59:05.07 nMpDa1VZ0.net
>>717
www
735:デフォルトの名無しさん (ワッチョイ 3fb6-UFRj)
17/02/05 19:08:24.19 VgP7nWQb0.net
>>710
こんな方法もあるんですね!
こっちも試してみます。ありがとうございます。
>>711
記述方法があってるかはわかりませんが、初心者なのでご容赦ください。
こんな感じでキAppleScriptを呼び出しました。
let appleScript = 「使いたいAppleScriptの記述」
NSAppleScript(source: appleScript)?.executeAndReturnError(nil)
736:デフォルトの名無しさん (ワッチョイ cfba-uZek)
17/02/05 22:21:36.88 o/8EHNtf0.net
他言語から来ると引数のラベルの存在意義が理解できず、むしろとても煩わしいので全て_付けてるのですが、なんなんですか?これ
この邪魔くさいラベルが必要な理由を教えてください
737:
738:デフォルトの名無しさん (アウアウウー Sa07-kDlj)
17/02/05 22:33:36.96 4p/Nn5VFa.net
関数を作った本人ならその時は分かるかもしれんが、第三者がその関数を使う時とか後から保守する時にわかりやすいようにだろ
739:デフォルトの名無しさん (ワッチョイ 7f3c-6sTg)
17/02/05 22:55:46.13 eIQFXmLo0.net
>>722
これははげしく同意
理由は名前と引数・戻り値の型が同じでも引数の外部名が違えば違う関数として扱いたいから
NextStepの遺産じゃないのかな
740:デフォルトの名無しさん (ササクッテロリ Spa7-gHkU)
17/02/05 23:04:05.83 u0uQCFq0p.net
>>722
>>650
741:デフォルトの名無しさん (ワッチョイ 7fc9-SsPq)
17/02/06 00:44:00.22 SAGpF4BT0.net
>>717
なるほどね。とりあえず彼女のスリーサイズとカップ数をあげてくれ
742:デフォルトの名無しさん (ワッチョイ 633c-0MWP)
17/02/06 00:49:54.19 dg7Gkhyu0.net
>>722
他言語でも特に分かり辛い引数は説明用変数を用意したりしてたから
俺の場合ラベルはすんなり腑に落ちたな
sh.shiftRows(r, r, 1, true, false);
↓
boolean copyRowHeight = true;
boolean resetOriginalRowHeight = false;
sh.shiftRows(r, r, 1, copyRowHeight, resetOriginalRowHeight);
743:デフォルトの名無しさん (ワッチョイ 7fc9-vqxm)
17/02/06 01:01:01.45 3ZIy1rLW0.net
>>722
named parameterでググれよ
744:デフォルトの名無しさん (ワッチョイ cfba-UJvE)
17/02/06 01:20:02.58 0dGh9mJF0.net
>>724
なるほど理解しました
swiftに採用したのは頂けませんね
第一引数だけラベル必要としないのがまた理解に苦しみます
745:デフォルトの名無しさん (ワッチョイ 7f3c-6sTg)
17/02/06 01:27:27.04 +8BGH8XP0.net
ラベル指定が必須ってのが面倒くさい元凶
必要な時に書けるようになってるのは何も悪くない
(foo, bar)ってタプルを使いたい時に( _: foo, _: bar)って書かないといけなかったらキレるよね
746:デフォルトの名無しさん (ワッチョイ 7f3c-6sTg)
17/02/06 01:33:52.92 +8BGH8XP0.net
>>729
>第一引数だけラベル必要としないのがまた理解に苦しみます
それはSwift3で修正されたんじゃ?
747:デフォルトの名無しさん (ワッチョイ 7fc9-vqxm)
17/02/06 02:21:15.75 3ZIy1rLW0.net
関数を使う側はIDEが補完してくれるんだから何も面倒くさいことなんて無いはずだろ
それなのにその存在しないコストを気にして関数定義時に毎回わざわざ "_" 書いてるって?
ドMなのかな?
748:デフォルトの名無しさん (アウアウウー Sa07-kDlj)
17/02/06 02:42:20.02 My0G4nGHa.net
俺の長年の研究によると
英語が苦手なやつほど、いろんな所を省略したがる
変数名とか関数名も面倒くさがって日本語名を使う傾向がある
func shohizeiKeisan(kakaku: Int) -> Int
みたいな感じで定義するから、呼び出し側で
let kekka = shohizeiKeisan(kakaku: 1200)
みたいな呼び出し方になってラベルの冗長性があまり効果的に使われない
たまに英語を使ったか思えば、綴りを間違ってたり変な短縮の仕方してたりする
オープンソースにすると恥ずかしいレベル
749:デフォルトの名無しさん (アウアウウー Sa07-kDlj)
17/02/06 02:49:54.81 My0G4nGHa.net
calculateTax(forPrice price: Int) -> Int
みたいに書けば
let tax = calculateTax(forPrice: 1200)
違和感ないんだけど
750:デフォルトの名無しさん (ワッチョイ 7f3c-6sTg)
17/02/06 05:03:00.89 +8BGH8XP0.net
>>734
>let tax = calculateTax(forPrice: 1200)
こういう例がSwift本でもよくあるんだけどマジックナンバーを直接書くことなんてほぼないからね
calculateTax(price)で十分なところを
calculateTax(forPrice: price)みたいな冗長な表現になってノイズが増えることのほうが多い
751:デフォルトの名無しさん (ワッチョイ ff93-4SR0)
17/02/06 08:42:17.87 VccDqIOI0.net
>>721
さんきゅ
参考になります
752:デフォルトの名無しさん (スプッッ Sd9f-UJvE)
17/02/06 09:08:43.07 cYxXlAn6d.net
>>735
ほんとそれ
753:デフォルトの名無しさん (スフッ Sd9f-4SR0)
17/02/06 09:48:23.52 6ukkaCk+d.net
>>729
せっかく�
754:。からSwift勉強するならSwift3にしませう
755:デフォルトの名無しさん (エムゾネ FF9f-4SR0)
17/02/06 10:13:04.33 LieVvyVtF.net
>>735
実際には引数の違いで長ったらしい関数名になっているライブラリなどの場合には
関数名を短く、同じ関数名を使用する事が出来るので理解しやすくなる
教科書の例題に出てくる程度の関数の量と名前の長さなら問題無いんだけどね
756:デフォルトの名無しさん (アウアウウー Sa07-kDlj)
17/02/06 10:16:13.86 bt8MJocIa.net
関数の引数が何かなんて作った本人はよく知ってるだろうけど、第三者には説明がないとわからないわけで、例えば、価格と税率の2つの引数を取るような関数だったら、第一引数が価格なのか、税率なのかは説明がないと分からないし
渡すべき引数も様々に変わる。
だから、関数の仕様を把握する上で俺は>>735の書き方に違和感は感じないけれど、それが冗長に思えるならもう感覚の問題というしかないな
757:デフォルトの名無しさん (ワッチョイ a317-4SR0)
17/02/06 10:26:20.88 pkGDAQrJ0.net
>>717
property宣言したら自動でsynthesizeされるので記述不要
何年か前からね
758:デフォルトの名無しさん (ワッチョイ 633c-vqxm)
17/02/06 10:26:53.85 vLeuYaJ10.net
>>733
func calc消費税(価格: Int) -> Int
これだとIDEで保管もしてくれるし、最高!
自分は日本語使ったことないけど
759:デフォルトの名無しさん (ササクッテロリ Spa7-gHkU)
17/02/06 10:30:32.27 VcPP6UDEp.net
日本語入力/英語入力の切り替えが最悪だな
ネタでも最高!とか言っちゃえる辺りがすごい
760:デフォルトの名無しさん (ワッチョイ 633c-vqxm)
17/02/06 10:33:25.09 vLeuYaJ10.net
>>743
お前Xcode使ってないの?
関数を使用する時は、最初の数文字入力するだけで保管されるんだぜ?
作成時のコスト?大したことねーよ、きっと
761:デフォルトの名無しさん (ワッチョイ 633c-0MWP)
17/02/06 10:34:23.91 dg7Gkhyu0.net
>>735
その手の冗長性は俺としては良いと思うんだけどな
受け売りだけど「間違ったコードは間違って見えるようにする」という観点的に
受ける側と渡す側の合致が目視で分かるのは安心感がある
まぁ適度を考慮してアンダースコアも割と使うけど
762:デフォルトの名無しさん (ササクッテロリ Spa7-gHkU)
17/02/06 10:44:17.12 VcPP6UDEp.net
>>744
「きっと」にワロタw
763:デフォルトの名無しさん (スプッッ Sd9f-UJvE)
17/02/06 11:25:24.96 2jscAFeGd.net
>>740
普通は他人にわかるようにするためにドキュメントコメントを付けるものだからやっぱりラベルなんていらんね
>>739の利点なら理解はできるけど
764:デフォルトの名無しさん (アウアウウー Sa07-kDlj)
17/02/06 11:32:13.07 bt8MJocIa.net
>普通は他人にわかるようにするためにドキュメントコメントを付ける
うん普通はね
でも世の中には強制でもされないとコメント書かない奴がいっぱいいる
それに関数ベースで説明的なラベルが付いてれば、わざわざ関数のコメント読まなくても
IDEの補完が効いて関数の仕様を理解しやすい
765:デフォルトの名無しさん (スフッ Sd9f-4SR0)
17/02/06 12:19:34.07 6ukkaCk+d.net
>>747
うちの合言葉は
「読みやすいソースとコメントは半年後の自分へのメッセージ」
「多少冗長に思えても、半年後の自分が困らないように書こう。書き直しも躊躇するな。」
以前は「メンテする人・使う人」だったんだけど「半年後の自分」に言い換えてから
割と真面目に対応してくれる人が増えた
766:デフォルトの名無しさん (ワッチョイ 132b-eX/G)
17/02/06 12:19:53.13 QBi3Y3km0.net
昔のObjC I/Fみたいに[前置詞]+[名詞]なラベルなら意味あるけど
今のObjCやSwift I/Fみたいに[前置詞]だけのラベルにはその論(ラベルだけで説明)は時代遅れだと思った
今は「ラベルは前置詞、変数名は名詞」で定義して、IDE(Xcode)のコード補完で関数説明じゃない
あ、コメントは書かないやつ多いし、自分もせっせと書くの面倒だから、関数定義で説明できるのは好ましい
767:デフォルトの名無しさん (ワッチョイ 132b-eX/G)
17/02/06 12:21:28.85 QBi3Y3km0.net
>>750は>>748へのレス
768:デフォルトの名無しさん (ワッチョイ a317-4SR0)
17/02/06 12:46:46.20 pkGDAQrJ0.net
>>742
Swiftだと日本語の関数名も補完されるのか。いいな。
Objective-Cだと日本語が混ざると補完が効かなくなったはず。
769:デフォルトの名無しさん (ブーイモ MMc7-XgLl)
17/02/06 15:47:59.82 0PGGfaNyM.net
>>722
他言語ってLLだろどうせ。LLで言語名乗るなよスクリプトっていえよ
TypeScriptでもScalaでもJava (lombok)でもカタいのは全てlabel付きの方向に行ってるのに
この時代に乗れない男を引き取ってくれる優しい言語はこの先現れるのだろうか
破棄、再評価を繰り返すこの業界で全くないとは言い切れんが
770:デフォルトの名無しさん (ワッチョイ 13c9-kDlj)
17/02/06 16:37:12.35 M531ILGV0.net
>>753
メソッド呼び出し時にラベルとともに引数を書くのはSwiftだけだと思ってたら、そうじゃないのね?
いまScalaってのをググってみたけど、ラベルなしでメソッド定義、呼び出ししてるみたいだが?
771:デフォルトの名無しさん (アウアウエー Sa5f-kDlj)
17/02/06 16:51:52.57 7LeUyz1la.net
つ Objective-C
772:デフォルトの名無しさん (ワッチョイ 7f3c-6sTg)
17/02/06 17:58:08.26 +8BGH8XP0.net
>>740
呼ぶ側にラベルを強制する必要なんてないでしょ
C#の例だけどラベル無しでも有りでも呼べるし有りなら順序も変えられる
static int CalculateBMI(int weight, int height) {...}
var weight = 60, height = 180;
CalculateBMI(weight, height); //<― こういう明らかなのはこれで呼びたい
CalculateBMI(weight: weight, height: height);
CalculateBMI(height: height, weight: height);
Swiftの仕様はAppleが既存ライブラリへの影響を最小限にするための苦肉の策だよ
773:デフォルトの名無しさん (ワッチョイ 7fc9-vqxm)
17/02/06 18:58:04.37 3ZIy1rLW0.net
>>756
それ誰かがうっかり
CalculateBMI(height, weight);
って書いてエンバグしてた場合気付けなくね
それともC#って順番じゃなくて変数名で引数に対応付けてくれんの?
JavaScript(ES2015)ではObjectを引数に取ることで疑似名前付き引数にする手法とObject Literal Shorthandの合せ技でそういうこと出来るようになってるけど
774:デフォルトの名無しさん (ササクッテロロ Spa7-kDlj)
17/02/06 19:38:32.44 +DEdH8rPp.net
だよな
関数を書いた本人は引数の順番知ってるかもしれんけど、第三者とか未来の自分はどうだろう
775:デフォルトの名無しさん (スプッッ Sd9f-UJvE)
17/02/06 21:30:09.99 2jscAFeGd.net
呼び先のメソッド見ればわかるし
776:デフォルトの名無しさん (ワッチョイ 633c-vqxm)
17/02/06 22:16:02.24 vLeuYaJ10.net
>>759
自分が使う時は見るけれど、後から第三者が書いたコード読むときにいちいち確認するのはめんどくさい
777:デフォルトの名無しさん (ワッチョイ 7f3c-6sTg)
17/02/06 22:18:34.56 +8BGH8XP0.net
>>757
>>758
最終的にはテスト書こうねって話だけど
ある程度の補完機能のあるエディタを使ってれば定義を見ながらコード書くから順番が分からないこともないし間違える可能性もすげー低い
それでも可能性はゼロじゃないけどこの手のミスを防ぐためだけなら可読性を犠牲にするほどの価値があるとは思わない
アンスコ書かなくてもデフォルトは省略可能で強制したい時だけ指定できるようにすれば十分
静的型付け言語なんだから型チェックに引っかかるような書き方を楽にできるようにしていくほうが言語としてはいい気がする
778:デフォルトの名無しさん (アウアウエー Sa5f-kDlj)
17/02/06 22:41:12.32 eyNF5CHCa.net
ま人それぞれなのかもの知らんけど、俺はXcodeの補完機能とラベルのおかげでコーディングがすごい楽になったわ
引数の多いAPIとか呼び出す時もわかり易い
そもそも他の言語だって、関数を定義する時は引数名と型を指定するわけで、そこの労力は変わらない(Swiftの場合は、引数名に加えて別のラベル名も指定できるけど、これは別に書かなければ引数名がそのままラベル名になる)し、
関数を呼び出す時も、何度も言うけどXcodeの補完が効くので、tabキー押しながら値を埋めていくだけで特に手間はかからない
そこまでラベルを嫌がる理由が俺には理解できない
779:デフォルトの名無しさん (ワッチョイ 7fc9-vqxm)
17/02/06 22:48:44.79 3ZIy1rLW0.net
ある日API側で
static int CalculateBMI(int height, int weight) {...}
に変わってたら?
ラベル書いてればコンパイラが引数間違ってるよって教えてくれるけど、間違える可能性すげー低いという思い込みでラベル書かない人は絶対気付けないよ
テスト書けばいい?
その前にまずラベル書いてくださいよ(苦笑
780:デフォルトの名無しさん (アウアウエー Sa5f-kDlj)
17/02/06 22:52:49.93 eyNF5CHCa.net
>>761
可読性を犠牲にって、ラベルのおかけで可読性は上がると思うんだが...
無茶苦茶なラベル名つけてない限り
781:デフォルトの名無しさん (ワッチョイ cfba-UJvE)
17/02/06 22:57:21.06 0dGh9mJF0.net
>>763
そんな変更を勝手に加える危ないAPIなんて使わないという選択をまず取る
782:デフォルトの名無しさん (アウアウエー Sa5f-kDlj)
17/02/06 22:59:24.91 eyNF5CHCa.net
予知能力者かな
783:デフォルトの名無しさん (ワッチョイ 7f3c-6sTg)
17/02/06 23:29:35.74 +8BGH8XP0.net
>>763
ラベル書いてたら普通はエラーにならずそのまま使えるよ。Swift以外ではね
可読性が上がるのなら書くしそうじゃないなら書かない、そういう選択肢が無いのが俺は嫌
784:デフォルトの名無しさん (ワッチョイ cf42-qddC)
17/02/06 23:29:54.33 DXHlWVxm0.net
>>735
c#、pythonみたいにラベル=仮引数名で十分
785:デフォルトの名無しさん (アウアウエー Sa5f-kDlj)
17/02/06 23:39:42.35 eyNF5CHCa.net
>>767
選択肢あるだろ アンスコ( _ )
786:デフォルトの名無しさん (ワッチョイ cfba-UJvE)
17/02/06 23:57:51.11 0dGh9mJF0.net
xcodeが最初に自動生成するコードもアンダースコア付いてるんだよなあ
787:デフォルトの名無しさん (アウアウエー Sa5f-kDlj)
17/02/07 00:02:13.06 d/8njjdTa.net
>>770
いやそれは昔からあるObj-Cで書かれたAPIの呼び出し方に合わせるためだろ
788:デフォルトの名無しさん (ワッチョイ 7fc9-vqxm)
17/02/07 00:03:29.25 U45A8ASp0.net
>>770
API Design Guidelines読めよ
ラベルなし全てが否定されてるわけじゃない
単に面倒だとか安全性を考えてないとか他の言語では~とかそういうアホな考えでラベルなしを選択するのがアホの極みだっていうだけだ
789:デフォルトの名無しさん (ワッチョイ 7f85-0MWP)
17/02/07 00:52:48.71 ZXoOddG/0.net
Autolayoutの親Viewって何?
自分で設定するの?それとも
ViewControllerのこと?
790:デフォルトの名無しさん (アウアウエー Sa5f-kDlj)
17/02/07 01:02:31.40 d/8njjdTa.net
レイアウト対象になってるViewの親Viewのことじゃねーの?
つうか質問する時に説明を省くんじゃねーよ
Autolayoutの親Viewってどこに書いてあったんだよ
それが書かれた文脈がわからないと想像でしか答えられんわ
つうか疲れたからもう寝る
791:デフォルトの名無しさん (ワッチョイ 7f3c-6sTg)
17/02/07 02:36:50.69 GtuDXK2z0.net
>>769
w マジレスするとアンスコにしたらラベル付き呼びたくても呼べない その逆もしかり
関数作る時に他言語では不要な意思決定がSwiftでは必要
言語仕様が変わらない限りどうしようもないからこの話題はこの辺で
792:デフォルトの名無しさん (ササクッテロラ Spa7-kDlj)
17/02/07 02:51:43.97 XrNu72Jop.net
>>775
そんな器用なことしたいならオーバーロードすればいいだ
func add(_ a: Int, _ b: Int) -> Int {
return a+b
}
func add(a: Int, b: Int) -> Int {
return add(a, b)
}
// お好きな呼び方でぇ
let x = add(10, 20)
let y = add(a: 10, b: 20)
793:デフォルトの名無しさん (スフッ Sd9f-4SR0)
17/02/07 08:38:57.64 7sv3izQhd.net
>>775
ラベルが要らないと思ったからアンダースコアにしたんだろ?
言ってる事が矛盾してね?
呼び出し時にラベルを付けたいと思うなら
それはラベルを付ける価値があるという事で
強制されたところでだれも不便に思わないよ
794:デフォルトの名無しさん (スフッ Sd9f-4SR0)
17/02/07 08:41:22.70 7sv3izQhd.net
>>775
>関数作る時に他言語では不要な意思決定がSwiftでは必要
無自覚に行われる小さな意思決定をプログラマに明示的に自覚させると言うのは
Swiftの設計思想の結構大切なところだと思うよ
795:デフォルトの名無しさん (ワッチョイ c366-4SR0)
17/02/07 21:14:52.34 4jeefcmH0.net
それでなにかよくなるのかね
796:デフォルトの名無しさん (スフッ Sd9f-4SR0)
17/02/07 21:31:12.11 7sv3izQhd.net
もちろん!
797:デフォルトの名無しさん (ワッチョイ b333-mNHV)
17/02/07 22:24:06.04 ZIH2X64r0.net
具体的におなしゃす
798:デフォルトの名無しさん (ワッチョイ 7f3c-6sTg)
17/02/07 22:28:45.43 GtuDXK2z0.net
>>778
関数作る時に決めるべきことと使う時に決めるべきことの違いを理解しようか
799:デフォルトの名無しさん (アウアウエー Sa5f-kDlj)
17/02/07 22:42:00.91 xaIKpgD2a.net
関数の仕様は作る側が使いやすいように決めればいいことだし、使う側は設計者の意図を汲み取ってそれに従うか、使いにくいと思ったら、継承するなりextensionで拡張するなりすればいい話
例えばsimdモジュールとか見ると、ラベル有り/無しバージョンのイニシャライザを提供してる
float2
public init(_ x: Float, _ y: Float)
public init(x: Float, y: Float)
どっちでも書ける
let v1 = float2(10, 20)
let v2 = float2(x: 10, y: 20)
float3、float4も同様
float3
public init(_ x: Float, _ y: Float, _ z: Float)
public init(x: Float, y: Float, z: Float)
float4
public init(_ x: Float, _ y: Float, _ z: Float, _ w: Float)
public init(x: Float, y: Float, z: Float, w: Float)
800:デフォルトの名無しさん (アウアウエー Sa5f-kDlj)
17/02/07 23:01:01.74 xaIKpgD2a.net
simdの設計者は
public init(_ x: Float, _ y: Float)
public init(x: Float, y: Float)
の2つのバージョンのイニシャライザは用意したけど、例えば第一引数だけラベル付きのイニシャライザ
public init(_ x: Float, _ y: Float)
は用意しなかった。
理由は分からないけれど、それを用意する必要性もメリットも感じなかったのかもしれないし、返って混乱の元になると考えたのかもしれない。
設計思想というほどのものでもないかもしれないけどそれが意図
でもそれがどうしても必要だという明確な理由があるなら extensionで追加すればいい
そんな理由があるとは思えないけど...
extension float2 {
public init(x: Float, _ y: Float) {
self.init(x, y)
}
}
801:デフォルトの名無しさん (ササクッテロリ Spa7-gHkU)
17/02/07 23:02:03.89 EhOLSQDnp.net
オプショナルで荒らしてたヤツが、キーワード_で荒らしてるだけだから
そんな真面目に相手しなくても良いだろうに
相手してる子も荒しで、荒し同士の空中戦かもだけど
802:デフォルトの名無しさん (ワッチョイ 7f3c-6sTg)
17/02/07 23:07:09.27 GtuDXK2z0.net
>>783
作る時の労力が増えるだけじゃなく使う時にコード補完で区別つかない
現状は一見同じシグニチャに見えるメソッドが2個ずつ並ぶことになる
それでもメリットが上回ると思う場合があったらはオーバーロードすればいいじゃね
803:デフォルトの名無しさん (アウアウエー Sa5f-kDlj)
17/02/07 23:12:30.28 xaIKpgD2a.net
まぁXcodeの補完はまだ改善の余地があるということで
それよりも早くリファクタリングできるようにしてほしい
Swiftの仕様が完全に固まるまで対応しないつもりかね
804:デフォルトの名無しさん (アウアウエー Sa5f-kDlj)
17/02/07 23:20:36.88 xaIKpgD2a.net
>>786
労力?
別バージョンのシグニチャを用意するぐらい然程労力とも思えないけど
全ての引数の組み合わせでラベル有無バージョンを用意したいってのなら別だけど
そこまで自由度を待たせるなら、ディクショナリ一つを引数にして、キーを引数名にした方が、設計意図にあってるかものしれない
805:デフォルトの名無しさん (ワッチョイ a317-4SR0)
17/02/07 23:35:58.62 vFUY1Q6g0.net
柔軟性が高過ぎるのも考えものだね
ライブラリ毎に流儀が存在したら使い辛い
806:デフォルトの名無しさん (ワッチョイ ff93-4SR0)
17/02/08 00:37:17.57 wuN4GLLw0.net
>>787
それホント
リファクタリングアシスト早く欲しい
ちょっとした変数名、関数名の変更でもアシスト無いと億劫でつい放置しちゃう
807:デフォルトの名無しさん (スフッ Sd52-S0So)
17/02/09 19:29:33.7
808:2 ID:bGGm+Vsdd.net
809:デフォルトの名無しさん (ワッチョイ 9293-S0So)
17/02/11 08:39:06.29 4V1/h4XS0.net
オムニグラフってswiftのクラス図作成に対応してるの?
誰か使ってない?
810:デフォルトの名無しさん (ワッチョイ cf3c-S0So)
17/02/11 15:54:18.34 oskBDXOt0.net
プログラミング初心者で勉強のためにボタンを押したら効果音が出るという単純なアプリを作りたいんだけど難しい?
811:デフォルトの名無しさん (JP 0Hb3-8/DI)
17/02/11 16:26:02.45 bfT7og+wH.net
swiftにこだわるな
812:デフォルトの名無しさん (アウアウエー Sa4a-C9ZD)
17/02/11 16:38:59.73 Edv5NWG3a.net
考えるな、感じろ
813:デフォルトの名無しさん (ワッチョイ 76ba-9CRV)
17/02/11 17:08:57.07 qQmrAco80.net
聞いて感じて考えて
814:デフォルトの名無しさん (アウアウオー Sa8a-S0So)
17/02/11 17:19:51.41 2PZ2/Gs1a.net
swiftは使った事ないけど、AudioPlayerクラスとかあれば、音声ファイル読み込んで、Playメソッドとかで鳴らせるはず。
iOS用の言語なら在るだろうから、簡単じゃないかな。
Windowsストアアプリで全く同じ機能作った時に簡単に作れた。
815:デフォルトの名無しさん (ササクッテロラ Spf7-uAX+)
17/02/11 17:47:29.76 8E8IVrXfp.net
なんで使ったことないのにこのスレにいるのやら
いやまぁ理由は分かるんだが
>>793
初心者向けのiOSアプリ開発書籍買ったら良さげ
そろそろ swift 3 に対応した本が出てるだろ
816:デフォルトの名無しさん (ワッチョイ b285-cGUq)
17/02/11 17:51:07.98 ScJtra280.net
>>793
C#に比べたら面倒
ボタンを配置して
swiftソースにACTIONでつないで
そこに>797のいうよう
やる感じ
ソースとして書く部分は10行もないかと
817:デフォルトの名無しさん (ワッチョイ f23c-DoU+)
17/02/11 18:19:38.45 ria0yk5C0.net
>>793
いろいろやり方あるけどAVFoundationのAVAudioPlayerを使うといいと思う
プログラミング初学者だといくつかはまりポイントあるだろうから困ったら質スレで聞けばいい
let soundURL = Bundle.main.url(forResource: “soundfile”, withExtension: "mp3")!
player = try! AVAudioPlayer(contentsOf: soundURL)
player.play()
818:デフォルトの名無しさん (ワッチョイ 935b-3OfB)
17/02/11 19:12:24.65 SqFaix0v0.net
>>793
import AVFoundation
@IBAction func PushButton(sender: AnyObject) {
let sound_data = NSURL(fileURLWithPath: NSBundle.mainBundle().pathForResource("sample", ofType: "mp3")!)
var audioPlayer: AVAudioPlayer = AVAudioPlayer(contentsOfURL: sound_data, error: nil)
audioPlayer.play()
}
819:デフォルトの名無しさん (ワッチョイ cf3c-S0So)
17/02/11 21:53:00.81 oskBDXOt0.net
みんな親切にありがとう
色々と調べたらAVFoundationのAVAudioPlayer使うことになりそうだ
>>800>>801のコードにボタンをACTIONでつなげれば良さそうだね
820:デフォルトの名無しさん (ワッチョイ f23c-DoU+)
17/02/11 22:00:59.47 ria0yk5C0.net
>>801
AVAudioPlayerのインスタンスを保持しておかないと音なる前に回収される
>>802
停止操作とか必要なくただビープ音的に鳴らしたいだけならSystem Sound Serviceってのもある
URLリンク(developer.apple.com)
821:デフォルトの名無しさん (ワッチョイ 935b-3OfB)
17/02/12 10:06:48.35 jCqP/Xy60.net
>>803
こんな感じね。
let soundIdRing:SystemSoundID = 1000 // new-mail.caf
AudioServicesPlaySystemSound(soundIdRing)
URLリンク(iphonedevwiki.net)
822:デフォルトの名無しさん (ワッチョイ 52a6-yzHa)
17/02/12 17:36:05.74 wbmA90a/0.net
AffineTransformのrotateが間違ってるっぽいんだけど
もしバグなら報告したいけどやり方わからん
let scale: CGFloat = 2
let angle: CGFloat = .pi / 4
var affine = AffineTransform(scale: scale)
affine.rotate(byRadians: angle)
print(affine)
// Prints "{m11:0.707106781186548,
m12:0.707106781186547,
m21:-0.707106781186547,
m22:0.707106781186548,
tX:0.0,
tY:0.0}"
var affine2 = CGAffineTransform(scaleX: scale, y: scale)
affine2 = affine2.rotated(by: angle)
print(affine2)
// Print "CGAffineTransform(a: 1.4142135623731,
b: 1.41421356237309,
c: -1.41421356237309,
d: 1.4142135623731,
tx: 0.0,
ty: 0.0)"
823:デフォルトの名無しさん (アウアウエー Sa4a-C9ZD)
17/02/12 17:44:34.25 al1G+i0ka.net
AffineTransformって、どっから持ってきたの?
824:デフォルトの名無しさん (スップ Sd52-a31+)
17/02/12 18:33:13.51 Okkscphrd.net
>>805
なんで仕様も知らないのに、バグだって解るの?
825:デフォルトの名無しさん (ワッチョイ 935b-3OfB)
17/02/12 18:38:31.94 jCqP/Xy60.net
>>805
var affine = AffineTransform(scale: scale)
affine.append(AffineTransform(rotationByRadians: angle))
print(affine)
826:デフォルトの名無しさん (ワッチョイ f23c-DoU+)
17/02/12 18:39:48.46 ashgYgUc0.net
>>805
バグってるぽいね
ここのReporting Bugsのところ見て報告するといいんじゃないかな
URLリンク(swift.org)
どう見ても設定値(m11とか)を読んでない
URLリンク(github.com)
827:デフォルトの名無しさん (ワッチョイ 935b-3OfB)
17/02/12 18:39:59.85 jCqP/Xy60.net
>>805
ところで、API Referenceをどうやって引いてる?
API Referenceなんて見ずに、blogの情報とか、漁ってる?
828:デフォルトの名無しさん (ワッチョイ f23c-DoU+)
17/02/12 18:43:54.40 ashgYgUc0.net
NSAffineTransformとInterchangableって言ってるのにこうやったら結果変わるんだからバグでしょ
var affine = NSAffineTransform(transform: AffineTransform(scale: scale))
affine.rotate(byRadians: angle)
829:デフォルトの名無しさん (ワッチョイ 935b-3OfB)
17/02/12 18:45:05.05 jCqP/Xy60.net
俺、夕飯の準備するわぁ
830:デフォルトの名無しさん (ワッチョイ 935b-3OfB)
17/02/12 19:02:44.16 jCqP/Xy60.net
俺もbugに思えてきた。
831:デフォルトの名無しさん (ワッチョイ 9b33-C9ZD)
17/02/12 19:45:50.10 s4ykSwHK0.net
殺虫剤はよ
832:デフォルトの名無しさん (ワッチョイ b285-cGUq)
17/02/12 20:06:38.87 /n7GcIvt0.net
mp3とかの曲の再生で
再生速度を上げたりさげたりするのは
AVAudioPlayerでできるの?
833:デフォルトの名無しさん (ワッチョイ 935b-3OfB)
17/02/12 20:27:22.43 jCqP/Xy60.net
URLリンク(kyoshiaki.hatenablog.com)
ここ見ると
swiftコマンドを作るのに2hr位かかるって!ただし、プロセスを1に限定してメモリ不足を回避しているので、プロセスを4にする事で高速化できるかも。多分素直に4倍高速になる。
834:デフォルトの名無しさん (ワッチョイ 935b-3OfB)
17/02/12 20:28:28.95 jCqP/Xy60.net
>>815
var rate: Float
The audio player’s playback rate.
ってかまじAPI Referenceみないの?
835:デフォルトの名無しさん (ワッチョイ 935b-3OfB)
17/02/12 20:55:59.50 jCqP/Xy60.net
Swift実践入門 ─ 直感的な文法と安全性を兼ね備えた言語 (WEB+DB PRESS plus)
この本超気になってる。24日(金)までデカイ本屋に行けそうに無い。
田舎住まいなもんで。
どうしよう、中身見ないでAmazonで注文してみっか!
836:デフォルトの名無しさん (ワッチョイ 52a6-yzHa)
17/02/12 21:30:20.51 wbmA90a/0.net
申し訳ないAffineTransformはiOSにはなかった
macOSの方です
バグレポートしようとしたらJiraってやつのログイン画面が出てきて詰んだ
837:デフォルトの名無しさん (ワッチョイ 52a6-yzHa)
17/02/12 21:39:30.82 wbmA90a/0.net
>>810
基本的にはXCodeでクラス名をコマンドキー押しながらクリックしてる
それでわからなかったらgoogleしてる
838:デフォルトの名無しさん (ワッチョイ f23c-DoU+)
17/02/12 22:11:58.80 ashgYgUc0.net
>>819
アカウント作成してバグレポートを上げようよ
結構クリティカルだと思うし世界中のOSX開発者が助かるよ
ついでにテストコードも追加か修正してプルリクエスト上げるといいと思う
affinetransformで検索してもissueは上がってない
URLリンク(bugs.swift.org)
Openradarに似たようなのあったけど中身ちょっと違う
URLリンク(openradar.appspot.com)
839:デフォルトの名無しさん (ワッチョイ 52a6-yzHa)
17/02/12 22:38:10.12 wbmA90a/0.net
>>820
頑張ってみる
本当はgithubでプルリクエストしたかったけどswiftコマンドつくるの失敗に終わった
URLリンク(swift.org)にWifi(itscom)からだとアクセスできない助けて
携帯からなら繋がる
840:デフォルトの名無しさん (ワッチョイ f23c-DoU+)
17/02/12 23:24:37.94 ashgYgUc0.net
swiftコマンドとかはすでにあるやつ(Xcodeの最新版の)を使えばいいんでは?
↓swift-corelibs-foundationをクローンしてFoundationだけビルドしてる例
URLリンク(dev.iachieved.it)
841:デフォルトの名無しさん (ワッチョイ 52a6-yzHa)
17/02/12 23:42:42.26 wbmA90a/0.net
>>823
おーーそんな方法があるのか
ありがとうございます
842:デフォルトの名無しさん (ワッチョイ 932b-yzHa)
17/02/13 09:03:20.14 s7YAQc1O0.net
NSとCGで挙動が違うのは正規仕様なんでは?
Class NSAffineTransform と Struct AffineTransform がInterchangableなのであって
Class NSAffineTransform と Class CGAffineTransform が互換あるとは言ってないような...
非publicなメンバの値まで一致させないといけない理由はないと思うんだ
843:デフォルトの名無しさん (ワッチョイ d3c9-C9ZD)
17/02/13 09:32:07.22 2bWgE/rs0.net
>>825
仕様が曖昧なので、bugっぽい動作をしている。仕様変更と同時に、rotateメソッドの実装の変更をrequestした方が良いと思う。
Struct AffineTransformのfunc rotate(byRadians: CGFloat)メソッドの仕様は、
Mutates an affine transformation matrix from a rotation value (angle α in radians).
変換行列を書き換えるってのが仕様なんだけど、その書き換え方については言及していない。
affineオブジェクトには行列Sが入っているとする。rotateメソッドでの書き換え方はは2通りある。
1. 行列Sx行列Rで書き換える
2. 行列Sは捨てて、新規に行列Rで書き換える
rotateの動作は2.なんだけど、1.が期待する動作だ。2.の動作が欲しければコンストラクタinit:rotateByRadiansを使えばいいワケだから。
844:デフォルトの名無しさん (ワッチョイ 932b-yzHa)
17/02/13 09:46:33.40 s7YAQc1O0.net
> 仕様変更と同時に、rotateメソッドの実装の変更をrequestした方が良い
そんな馬鹿なw従来この仕様で作って来たソフトがてんやわんやになるわ
いやまぁApple様がそう言うなら仰せの通りにって直すだけだけど
要はNS, CGの互換性はどうでもよくて
AffineTransformの仕様/実装が明記されてなくて気分悪いからバグ報告出そうぜってことか
僕が考えた最強のAffineTransformの仕様/実装が受け入れられるのかねぇ
845:デフォルトの名無しさん (ワッチョイ d3c9-C9ZD)
17/02/13 09:56:45.14 2bWgE/rs0.net
>>827
AffineTransformはごく最近に導入されたので、仕様変更することでの混乱はまだ少ない。
Swift3.1, Swift4へとこの変な仕様が受け継がれていくのを防ぐのが得策だと思うなぁ。
846:デフォルトの名無しさん (アウアウエー Sa4a-C9ZD)
17/02/13 10:11:14.17 LkG0cYl2a.net
俺はもこれはバグだと思うわ
仕様だとしたら一貫性が無さすぎるし、利用者もそんな挙動は期待してないでしょ
tlanslateメソッドもscaleメソッドも、元の値を反映して更新かけるのに
rotateメソッドだけ、m11~m22は元の値を破棄して、tX, tYは維持するってのが仕様だとしたら気持ち悪すぎる
847:デフォルトの名無しさん (ワッチョイ 173c-cGUq)
17/02/13 10:14:16.16 +QLG4LyN0.net
URLリンク(github.com)
appendしてくれる方がいいと思う
public mutating func rotate(byRadians angle: CGFloat) {
append(AffineTransform(rotationByRadians:angle))
}
848:デフォルトの名無しさん (ワッチョイ d3c9-C9ZD)
17/02/13 10:20:48.39 2bWgE/rs0.net
>>830
AffineTransformの初期値は単位行列だから、それで良いかも。
849:デフォルトの名無しさん (ワッチョイ d3c9-C9ZD)
17/02/13 10:21:40.61 2bWgE/rs0.net
>>830
いや、メソッド呼び出しにはコストがかかるから、m11, m12…とかの値をつかって、ちゃんと計算して欲しい。
850:デフォルトの名無しさん (ワッチョイ d3c9-C9ZD)
17/02/13 10:37:34.88 2bWgE/rs0.net
AffineTransform.swiftをみてるけど、
Mutates an affine transformation matrix
ってコメントと
Creates an affine transformation matrix
っていうコメントが出てくる。
Muattesってのは、行列をappendするっていう意味で使ってるんじゃないかなぁ。
851:デフォルトの名無しさん (ワッチョイ d3c9-C9ZD)
17/02/13 11:00:26.80 2bWgE/rs0.net
Swift.orgにあるSwift3.1のドキュメントをみたら、Indexable, IndexableBaseプロトコルが無くなってる。Collectionプロトコルも変更ありそう。
852:デフォルトの名無しさん (ワッチョイ d3c9-C9ZD)
17/02/13 11:21:40.06 2bWgE/rs0.net
疑問があります。
ジェネリックなclassを定義する時<T>とかって型パラメータを記載します。
たとえば
class GeoPoint<T> {
}
ジェネリックなprotocolの定義では型パラメータ(付属型)をこんな具合に記述します。
protocol GeoPoint {
associatedtype T
}
なんで
protocol GeoPoint<T> {
}
って記述方法にならなかったんでしょう?
853:デフォルトの名無しさん (ワッチョイ 173c-cGUq)
17/02/13 14:12:54.92 +QLG4LyN0.net
>>835
付属型が先にあって、ジェネリクスは後から実装されたため
手遅れだった
URLリンク(github.com)
854:デフォルトの名無しさん (ワッチョイ d3c9-C9ZD)
17/02/13 14:45:06.42 2bWgE/rs0.net
>>836
THX!
Generic protocols
One of the most commonly requested features is the ability to parameterize protocols themselves.
これこれ!俺もコレが欲しかった!
protocol ConstructibleFromValue<T> {
init(_ value: T)
}
こうすると、構造体Realに対して2種類のinitの実装を求める事ができる。
これの何が問題なんだ?
struct Real { ... }
extension Real : ConstructibleFrom<Float> {
init(_ value: Float) { ... }
}
extension Real : ConstructibleFrom<Double> {
init(_ value: Double) { ... }
}
855:デフォルトの名無しさん (ワッチョイ 52a6-yzHa)
17/02/13 15:04:45.79 E5GyABVO0.net
AffineTransformのやつ一応バグレポート出した
英語できなすぎてちゃんと伝わるかはわからん
856:デフォルトの名無しさん (ワッチョイ d3c9-C9ZD)
17/02/13 15:09:24.97 2bWgE/rs0.net
>>838
あんたは、偉い!
857:デフォルトの名無しさん (ワッチョイ f2c9-3OfB)
17/02/13 15:19:29.48 HAPf6MFC0.net
>>837
associated typeは型の関係性を記述するもの、type parameterは型を具体化されるためのもので、そもそも目的が違うってことでしょ
858:デフォルトの名無しさん (ササクッテロリ Spf7-v7A7)
17/02/13 15:28:56.41 M5UvUgvDp.net
包括できるだろうし、破棄変更が論外なワケでもなし
こっちのPRを誰か、、、
859:デフォルトの名無しさん (ワッチョイ f23c-DoU+)
17/02/13 16:16:43.69 tn7uWAuX0.net
>>838
乙! 全世界が救われた
2回rotateさせるテストケースがあれば防げたろうに
mutaing funcはバグりやすいいい例かも
860:デフォルトの名無しさん (ワッチョイ d3c9-C9ZD)
17/02/13 16:35:02.82 2bWgE/rs0.net
>>838
画像やBezierPathとか使わない人には、何のことやら判らんかもね!
861:デフォルトの名無しさん (ワッチョイ d3c9-C9ZD)
17/02/13 17:09:58.36 2bWgE/rs0.net
SwiftのBug Reportサイトみてると面白いなぁ。
Report件数は徐々に増えている。ここ90日間を見ると。
単に関心を集めている事を示しているのか、bugが収束していかないのか、どっち?
862:デフォルトの名無しさん (ササクッテロリ Spf7-v7A7)
17/02/13 17:13:54.68 M5UvUgvDp.net
年末年始のバケーションが終わって仕事始めただけ説
863:デフォルトの名無しさん (ワッチョイ 173c-cGUq)
17/02/13 18:25:38.76 +QLG4LyN0.net
protocol Point { associatedtype T }
プロトコルを受け取ることは出来ても
func f<P>(_ p:P) where P:Point, P.T == Int { }
プロトコルで返せないし保持も出来ない
func f() -> Point<Float> { ... }
なのでSequenceでは
suffix(...) -> AnySequence<Element> のように
オーバーライド出来るようType Eraseのstructで実装を隠すか
lazy: LazySequence<Self> のように開き直って
ラップされてる型すら丸出しで返している
AnyLazySequence<Element>ですらない
今後もこれで行くのだろう
864:デフォルトの名無しさん (ワッチョイ f2c9-3OfB)
17/02/13 19:29:14.18 HAPf6MFC0.net
それはGenerics ManifestoのGeneralized existentialsに書いてることじゃないの
Any<Point where .T == Float>って書けるようにするんでしょ
865:デフォルトの名無しさん (ワッチョイ 935b-3OfB)
17/02/13 21:21:52.09 MyT3Jhih0.net
>>846
型消去なんて初めて知った。
VBAのVariant型みたいなクラス、構造体を作るんだって。
866:デフォルトの名無しさん (ワッチョイ b7bd-yzHa)
17/02/13 22:41:44.66 6dmT0k850.net
Sequence周りって3.0 betaの頃にコロッコロ仕変してた悪夢があるな
そんな根幹I/Fを何度も変えるなと当時頭痛くなったわw
仕様破壊変更がある5.0までにまだまだ変わりそう
867:デフォルトの名無しさん (ワッチョイ 173c-cGUq)
17/02/13 23:16:42.44 +QLG4LyN0.net
>>847
Move where clause to end of declaration(SE-0081)が決定済みなので
その書き方は将来的にも無くなってる
なので実装されても直の型でなくGeneric Type Aliasesを挟んでいく方向になるんじゃないかな
typealias AnyPoint<T> = Any<Point> where .T == T みたいな
例えそれでも _boxを抱えたstruct が消滅するならかなりすっきりするけど
868:デフォルトの名無しさん (ワッチョイ 9293-S0So)
17/02/13 23:30:02.41 yy8XR/E60.net
>>838
乙々、
アフィン変換使わないから詳細はりかいできなかったけど
放置せずキチンとレポートするのは素晴らしい
869:デフォルトの名無しさん (ワッチョイ 9b33-C9ZD)
17/02/14 08:13:19.63 G4PVI11K0.net
さすがSwift!!!
Swift最高!!!
870:デフォルトの名無しさん (ワッチョイ d3c9-C9ZD)
17/02/14 08:39:20.94 oIIhH5jL0.net
>>849
独自でIteratorを実装する人にしか影響ないんちゃう?
UIKit使ってiOSアプリ作る人の中で、独自のデータデータ構造を定義、実装する人なんて少ないと思う。
871:デフォルトの名無しさん (スプッッ Sd72-NOvL)
17/02/14 09:07:42.45 15O9OsV1d.net
>>852
次世代言語のなかでは最も簡単で誰でも使えるとても良い言語だと思う
872:デフォルトの名無しさん (スップ Sd72-ogAn)
17/02/14 09:10:39.08 o1Hy+Q1/d.net
なんたってモダンだからなw
873:デフォルトの名無しさん (ワッチョイ b7bd-yzHa)
17/02/14 09:12:13.53 j+ud4G/F0.net
上層レイヤーを扱う分には影響ないと思うんだけど、C <-> Swiftのラッパー層あたりは結構困る
macOS, iOS専用言語じゃないという建前を現実にするためその辺の層を作ってると
メジャーバージョンアップの根幹I/Fのライブラリ仕様変更はいつも笑えるほどにアレなの...
StringやRaw Memoryも同じく未だに仕変が多いような
確かにそれで困ってるアホはSwiftに夢見る少数だから笑いながら扱っている:)
874:デフォルトの名無しさん (ササクッテロラ Spf7-CouY)
17/02/14 09:14:30.69 EC+U4L2lp.net
関数内でのスタティック変数の宣言と、VBのwith~end with的な構文があると嬉しいんだけど
875:デフォルトの名無しさん (アウアウエー Sa4a-CouY)
17/02/14 09:14:48.51 nwUJp3gZa.net
関数内でのスタティック変数の宣言と、VBのwith~end with的な構文があると嬉しいんだけど
876:デフォルトの名無しさん (ワッチョイ d3c9-C9ZD)
17/02/14 09:47:42.81 oIIhH5jL0.net
>>854
だれでも簡単に扱えない、C++みたいな運命を辿りかねない。
Standard Libraryの充実って所に力点を置き過ぎるのは、初心者に
言語使用デカすぎ!って印象を抱かせてしまう。
C++が2011年まで放置されたような事になっちゃうよ。
877:デフォルトの名無しさん (スプッッ Sd72-NOvL)
17/02/14 10:03:21.46 15O9OsV1d.net
>>859
そこを批判するのはどうかとおもうね
いずれにしても必要なこと
878:デフォルトの名無しさん (ワッチョイ 173c-cGUq)
17/02/14 10:58:05.18 2PqESwAW0.net
>>859
遅れはしたが別に放置はされてない
879:デフォルトの名無しさん (JP 0H72-cGUq)
17/02/14 12:09:10.49 OJnhURbNH.net
C++11で安定したのでは?
880:デフォルトの名無しさん (ワッチョイ f23c-DoU+)
17/02/14 14:11:53.20 gfvqdCIF0.net
>>858
>関数内でのスタティック変数の宣言
スタティック変数を関数内で宣言したいってどういうケース?
881:デフォルトの名無しさん (ワッチョイ d3c9-C9ZD)
17/02/14 14:14:19.93 oIIhH5jL0.net
>>863
関数が何回呼ばれたかをカウントするために、static varしたいんじゃないか?
882:デフォルトの名無しさん (ワッチョイ d3c9-C9ZD)
17/02/14 14:23:42.66 oIIhH5jL0.net
var cnt = 0
let f = { cnt += 1; print("cnt = ¥(cnt)") }
f()
f()
f()
closure使えば、何回呼ばれたかは、カント可能なんだが、これじゃダメなのか?
883:デフォルトの名無しさん (ワッチョイ f2c9-3OfB)
17/02/14 14:23:49.58 LIVGV7l10.net
クロージャでいいんじゃない
884:デフォルトの名無しさん (ササクッテロラ Spf7-CouY)
17/02/14 14:36:43.72 EC+U4L2lp.net
前回の呼ばれた時の値を保持しときたいならクロージャを用意するまでもなく別にメンバ変数でもいいんだけど、関数内で
static var count: Int
って宣言するだけで済めば便利だなと思っただけだよ
885:デフォルトの名無しさん (ササクッテロリ Spf7-v7A7)
17/02/14 15:12:32.02 W2b/azRYp.net
関数内staticの必要性は分からんけど>>865はダサいと思った
出来ることとスマートであることは別だよね
886:デフォルトの名無しさん (ワッチョイ f2c9-3OfB)
17/02/14 16:00:12.19 LIVGV7l10.net
お前がそう思うんなら(ry
887:デフォルトの名無しさん (スフッ Sd52-S0So)
17/02/14 18:43:58.17 qIbz53rXd.net
>>862
ときどきでいいからc++17の事も思い出してあげて
888:デフォルトの名無しさん (ワッチョイ f23c-DoU+)
17/02/14 19:45:15.25 gfvqdCIF0.net
そういう用途かー
カウント処理をラップする関数を書いてそれにカウントしたい関数を渡したいところ
でもあらゆる型の関数(クロージャ)でも受け取って引数付きで実行するのってSwiftでできるんだっけ?
889:デフォルトの名無しさん (ワッチョイ f2c9-3OfB)
17/02/14 22:04:56.83 LIVGV7l10.net
>>871
URLリンク(gist.github.com)
古いから何箇所か手直しいるけどこんな感じで出来なくはないけど
890:デフォルトの名無しさん (ワッチョイ 173c-cGUq)
17/02/14 22:31:11.88 2PqESwAW0.net
任意の多引数には言語仕様的に対応出来ないから
これと同じようなやり方で足りそうな所まで並べるしかない
URLリンク(github.com)
891:デフォルトの名無しさん (ブーイモ MM52-mpSg)
17/02/14 22:54:22.13 +bEgvAQFM.net
>>867
リセットするときどうすんの?
あまりに用途が限られるのでは…
892:デフォルトの名無しさん (アウアウエー Sa4a-CouY)
17/02/14 23:03:44.89 PDBDanqwa.net
ん? リセット? 普通に関数内で
count = 0
でダメ?
Obj-Cで使う時と同じ
893:デフォルトの名無しさん (ワッチョイ f23c-DoU+)
17/02/14 23:20:04.44 gfvqdCIF0.net
>>872
㌧
型を渡して、doAfterでラップして、callで呼ぶっていう3ステップはちときついね
前2つはカウント専用にすれば1ステップになるけどcallじゃなくカウント機能のついた関数を返してくれてそれを実行したいところ
あと引数の数の違いはタプルになるから問題なさそうだけど高階関数にも使えるんだろうか?
とりあえずSwift3で動くバージョン上げといた
URLリンク(gist.github.com)
894:デフォルトの名無しさん (ワッチョイ f23c-DoU+)
17/02/14 23:20:32.69 gfvqdCIF0.net
>>873
これは辛い
895:デフォルトの名無しさん (ブーイモ MM52-mpSg)
17/02/14 23:26:04.59 y+v+ZN8qM.net
>>875
それを誰が指示すんの?
内部のstatic変数を初期化する引数を追加して使用者に指定してもらうの?
896:デフォルトの名無しさん (アウアウエー Sa4a-C9ZD)
17/02/14 23:34:45.01 PDBDanqwa.net
>>878
それは引数で渡すのか他の変数の状態に依存するのか関数を書く人次第でしょ
C言語のstatic変数使ったことないの? ググってみれば?
897:デフォルトの名無しさん (ワッチョイ 9b33-C9ZD)
17/02/15 00:01:10.23 RQyBuwlX0.net
Swift界隈ではC言語を知らない人もいるのだろう
898:デフォルトの名無しさん (ワッチョイ f2c9-3OfB)
17/02/15 00:05:03.84 98yhGEhP0.net
>>876
ラップされた側でさらにタプルに包んで渡さないといけないのがつらいけどこれどうにかできんかな
func wrap<T, V>(_ fn: @escaping (T) -> V) -> (T) -> V {
print("¥(T.self) -> ¥(V.self)")
var counter = 0
return { (args: T) -> V in
let mirror = Mirror(reflecting: args)
let inputs = mirror.children.count == 0 ? [args] : mirror.children.map { $0.value }
let result = fn(args)
print("¥(counter): ¥(inputs) -> ¥(result)")
counter += 1
return result
}
}
func f1(a: Int, b: String) -> String { return repeatElement(b, count: a).joined() }
let f2 = wrap(f1)
f2((5, "z"))
f2((3, "abc"))
// (Int, String) -> String
// 0: [5, "z"] -> zzzzz
// 1: [3, "abc"] -> abcabcabc
899:デフォルトの名無しさん (ワッチョイ 173c-cGUq)
17/02/15 00:25:36.90 rlmICMnW0.net
>>881
URLリンク(swiftlang.ng.bluemix.net)
900:デフォルトの名無しさん (ワッチョイ f2c9-3OfB)
17/02/15 00:38:51.58 98yhGEhP0.net
>>882
なるほど、そうなるのか
901:デフォルトの名無しさん (ワッチョイ f23c-DoU+)
17/02/15 01:03:41.72 WU5+o8Pm0.net
>>881
>>882
いいねー
ただ現状は>>873と同じで引数の数でオーバーロードしておく必要があるってことだね
902:デフォルトの名無しさん (アウアウエー Sa4a-C9ZD)
17/02/15 01:43:26.08 5Sts5aosa.net
まぁ、苦労した割にはさほど実用性はないし、何より保守性が悪すぎるよね
static変数って別にカウント用途だけじゃなくて、例えば前回の状態を保持しときたい、だけどその状態を、メンバ変数として持つより、その関数だけに局所化しときたいし、クロージャを使うほど大仰でもないような時に便利なわけで
上の例みたいに回数をカウントするとか、前回の処理の成否を保持しといてリトライの制御に使ったり、メッセージ内容(何回失敗しました..)を変えたりとか、線の描画なんかで前回のクリック位置を覚えときたいとか、いろいろあるんだけど...
一番のメリットは、手軽に使えることだと思う。多用はいかんけど。
903:デフォルトの名無しさん (ワッチョイ f2c9-3OfB)
17/02/15 03:34:27.80 98yhGEhP0.net
いや、そもそもメンバ変数にしたくない理由が分からんけどな
904:デフォルトの名無しさん (ワッチョイ d3c9-C9ZD)
17/02/15 09:20:48.24 ItYgKVGf0.net
>>881
THX a lot.
けどclosureを引数にとって、closureを返す関数の呼び出しっての�
905:ヘ、頭クラクラする。
906:デフォルトの名無しさん (ササクッテロリ Spf7-v7A7)
17/02/15 10:01:52.43 er7cKMeEp.net
クロージャーにtypealias使えば少しは緩和されるかな
多用するものじゃないけども
907:デフォルトの名無しさん (アウアウエー Sa4a-C9ZD)
17/02/15 10:19:20.68 cA9nAL4ta.net
>>886
メンバ変数だと他のメソッドから意図せず変更される可能性がある
908:デフォルトの名無しさん (ワッチョイ f23c-DoU+)
17/02/15 15:21:51.64 WU5+o8Pm0.net
メンバ変数ってインスタンス変数のことで
スタティック変数ってクラス変数のことでしょ?
クロージャ使う以外に他からの変更を防ぐ手段ってあるのかな
関数のメタデータに好きな値を設定する手段でもあればできるかもだけど
909:デフォルトの名無しさん (アウアウエー Sa4a-C9ZD)
17/02/15 15:40:42.82 nbc++MSva.net
>>890
上で話してるstatic変数は、クラス変数とはちょっと違う
C言語の関数内static変数のことで、性質的にはクラス変数に近いけど基本的にその関数内でしかアクセスできない
C言語由来のC++やObj-Cのメソッド内にも定義できる
910:デフォルトの名無しさん (ワッチョイ f2c9-3OfB)
17/02/15 15:54:15.06 98yhGEhP0.net
>>889
他のメソッドに触られたくないとなったときに、クラスを分割するんじゃなくてstaticローカル変数でメソッドに閉じ込めたいという状況がわからない
オブジェクト指向的にはそのクラスが適切な凝集度に収まってないってことでしょ
staticローカル変数とかクロージャで状態を関数に閉じ込めてしまうとテストも難しくなる問題もある
911:デフォルトの名無しさん (アウアウエー Sa4a-C9ZD)
17/02/15 16:13:28.40 nbc++MSva.net
>>892
状況って改まって言われてもあれだけど、クラスの属性とするほどもない一時的な値を保持しときたい時とかかなぁ
例えば整数の並びを読み込みながら、直前に読み込んだ値との差を表示する処理があったとして、
func printDiffernce() {
static var prevValue: Int
if let curValue = self.getNextValue() {
print("difference = ¥(curValue - prevValue)")
prevValue = curValue
} else {
prevValue = 0
}
}
みたいな書き方ができれば便利じゃね?
個人的にSwiftにはスクリプト言語的な手軽さも期待してるんで、やっつけ仕事とかだと重宝すると思うんだけどね
912:デフォルトの名無しさん (ワッチョイ f23c-DoU+)
17/02/15 17:54:12.90 WU5+o8Pm0.net
>>891
自分が主に使ってきた言語でそういうのなかったから使ったことなかったわ
C++とObj-Cを除くとCのstatic local変数が実装されてるのはVB.NETくらいみたいね
913:デフォルトの名無しさん (ワッチョイ f23c-DoU+)
17/02/15 18:05:13.29 WU5+o8Pm0.net
>>893
こういうので我慢してはどうだろうか?
func printDiffernce() {
struct Prev { static var value: Int? }
let curValue = getNextValue()
if let prevValue = Prev.value {
print("difference = ¥(curValue - prevValue)")
Prev.value = curValue
} else {
Prev.value = curValue
}
}
自分ならインスタンス変数使うけど
914:デフォルトの名無しさん (アウアウエー Sa4a-C9ZD)
17/02/15 18:26:07.27 nbc++MSva.net
>>895
一番お手軽な代替だけと無理やり感は否めないね
自分もそこまでやるなら素直にインスタンス変数使うわ
915:デフォルトの名無しさん (ワッチョイ f2c9-3OfB)
17/02/15 18:38:47.57 98yhGEhP0.net
struct S {
func foo() {
struct T { static var count = 0 }
print(T.count)
T.count += 1
}
}
let s1 = S()
s1.foo()
s1.foo()
s1.foo()
let s2 = S()
s2.foo()
s2.foo()
s2.foo()
これで"0 1 2 0 1 2"を期待するか"0 1 2 3 4 5"を期待するか
読みやすいと思うか読みにくいと思うか
人によって違うだろうしstaticローカル変数があったとしても混乱の元でしかないようなきがする
916:デフォルトの名無しさん (スフッ Sd52-S0So)
17/02/15 18:47:02.04 ngDNeO3Hd.net
>>891
インラインCで書けないの?
917:デフォルトの名無しさん (スップ Sd52-ogAn)
17/02/15 18:57:43.93 Ngm4n4Trd.net
>>898
without Cなモダンな言語SwiftでインラインのCなんか許されるわけねぇだろ
918:デフォルトの名無しさん (ササクッテロラ Spf7-C9ZD)
17/02/15 19:48:47.19 Whvl4rVxp.net
>>897
そこは仕様を理解した上での使用ならいいのではという気がする
実際C++での振る舞いも同じだし、staticなんだからそれでいいだろうと
今までC言語で使ってた人には違和感はないでしょ
まぁSwiftは、曖昧でわかりにくい挙動は廃止の方向で動いてるっぽいからSwiftに組み込まれる可能性は低いだろうけど
919:デフォルトの名無しさん (ワッチョイ 9b33-ogAn)
17/02/15 19:57:33.26 RQyBuwlX0.net
至高の言語Swift
920:デフォルトの名無しさん (スフッ Sd7f-yXFx)
17/02/16 09:38:14.22 y1APn5Gud.net
ま、関数がローカルでスタティックな変数なんて持つと
再入不能になって、並列化が困難になるから
モダンじゃないよな
921:デフォルトの名無しさん (ワッチョイ 8bc9-ykbm)
17/02/16 10:04:42.21 4SRfHRZm0.net
>>902
なるほどぉ。
けど、そこはプログラマーを信頼して、static varできるfuncを許容するってのも選択肢かも。
922:デフォルトの名無しさん (ワッチョイ 8bc9-ykbm)
17/02/16 10:21:22.38 4SRfHRZm0.net
SwiftSR-3941
AffineTransform.rotate(byRadians:) can be wrong
まったくActivityが無いなぁ。まずいなぁ。
923:デフォルトの名無しさん (アウアウエー Sa7f-ykbm)
17/02/16 11:17:17.48 3C0NPS0ia.net
関数内スタティック変数が危険で、インスタンス変数やクラス変数は安全って理論が分からん
インスンタンス間で共有される点では危険かもしれんが、それはクラス変数も同じだろ
スコープの認識で誤解を生む可能性が高いという点では同意するが
924:デフォルトの名無しさん (スフッ Sd7f-yXFx)
17/02/16 12:10:38.93 y1APn5Gud.net
>>905
そういった話はPOSIX4にでも言ってくれ
何年も前に結論が出てるから遅きに失した感はあるけど
925:デフォルトの名無しさん (ワッチョイ 8bc9-ykbm)
17/02/16 12:40:38.73 4SRfHRZm0.net
>>906
POSIXってなんて発音してる?
ポジックス
ホジックス
ポシックス
どちらでしょう?
どこぞでJavaScriptをジャバスクって読んで炎上してました。
926:デフォルトの名無しさん (スップ Sd7f-PET2)
17/02/16 13:30:20.81 QNa2K6exd.net
>>907
どう読んでもホジックスねーだろ
勝手にホジッてろ
927:デフォルトの名無しさん (ワッチョイ 8bc9-ykbm)
17/02/16 14:04:26.99 4SRfHRZm0.net
じゃぁC++はどう発音すべきでしょう。
ちなみに、僕は
シィープラプラ
って言ってました。
やっぱり
シィープラスプラス
って言うべきでしょうかねぇ?
928:デフォルトの名無しさん (JP 0H1f-3aUF)
17/02/16 14:20:18.92 1VBkG9E6H.net
たすたす
929:デフォルトの名無しさん (ワッチョイ 8bc9-ykbm)
17/02/16 14:39:47.25 4SRfHRZm0.net
>>910
外人さんの発音を真似る事にします。
C++ = シープラスプラッス
JavaScript = ジャバスクリット
Swift = スイット
どうやらp, fって発音しないのかな?
930:デフォルトの名無しさん (ワッチョイ 3b3c-fFgi)
17/02/16 15:20:54.37 dgGiwFPU0.net
>>911
p発音しないんか!
Pascal = アスカル
Python = ワイソン
931:デフォルトの名無しさん (ワッチョイ 8bc9-ykbm)
17/02/16 15:41:59.99 4SRfHRZm0.net
>>912
母音のあとのpは発音しない。
ip -> i
932:デフォルトの名無しさん (ワッチョイ 0b4e-N9BQ)
17/02/16 15:46:25.71 fb6O/m5X0.net
プラッチック
933:デフォルトの名無しさん (アウアウエー Sa7f-ykbm)
17/02/16 15:48:25.74 zitEQFpsa.net
URLリンク(www.youtube.com)
URLリンク(www.youtube.com)
URLリンク(www.youtube.com)
聞き取れないなら耳がおかしい
934:デフォルトの名無しさん (JP 0H1f-3aUF)
17/02/16 16:47:34.10 1VBkG9E6H.net
apfel
935:デフォルトの名無しさん (ワッチョイ 5f3c-Scgb)
17/02/16 16:56:45.12 Om/f1qwp0.net
>>913
そんなルールないでしょ
文末だったり次が子音の時に唇を閉じるだけで空気を吐き出さない人もいるから
それが音として聞き取れてないだけだと思うぞ
URLリンク(www.youtube.com)
936:デフォルトの名無しさん (ワッチョイ 5f85-eq+O)
17/02/16 16:58:53.36 Cc78fshD0.net
外人外人って
おまえらどこの国の発音を想定してるの?
937:デフォルトの名無しさん (ワッチョイ 3b3c-Dr1I)
17/02/16 18:11:32.30 164TOoVr0.net
ジパング
938:デフォルトの名無しさん (ワッチョイ eb33-ykbm)
17/02/17 03:44:46.12 7wkNsQja0.net
至高の言語Swift
939:デフォルトの名無しさん (ササクッテロリ Sp9f-X9Uf)
17/02/17 08:02:46.95 3FtIr36Jp.net
究極の言語Objective-C
940:デフォルトの名無しさん (スプッッ Sd7f-PET2)
17/02/17 09:53:10.86 aT4GW3VEd.net
極上の言語swift
941:デフォルトの名無しさん (ワッチョイ 8bc9-ykbm)
17/02/17 10:02:21.81 Akp7bstt0.net
100個のInt要素を格納した配列2個の内積を計算するとします。
let a: [Int] = Array(repeating: 1, count: 100)
let b: [Int] = Array(repeating: 10, count: 100)
a, bの内積をFoundationモジュールのThreadクラスを使って4つのスレッドを生成して計算するコードは、どんな具合になるのでしょう?
どなたか、適当なサンプルを紹介してください。
942:デフォルトの名無しさん (ササクッテロラ Sp9f-BRgT)
17/02/17 10:31:37.24 0upCUQyEp.net
丸投げすんな
まず自分で考えたコードを示してどこで躓いてるかを質問しろ
943:デフォルトの名無しさん (ワッチョイ 8bc9-ykbm)
17/02/17 11:17:40.03 Akp7bstt0.net
>>924
いや、ごもっとも。
DispatchQueueやOperationを使った例は見つかるのに、Threadを使った例が見つからないんですよ。
前者2つは、生成スレッドの数をSystem側が制御するのが気にくわないです。
そこでPOSIX Threadを使いたいのですが、どうやってjoinするのか?
API Documentを見てもよく判らずお尋ねしたしだいです。
944:デフォルトの名無しさん (ワッチョイ 8bc9-ykbm)
17/02/17 11:19:41.97 Akp7bstt0.net
もうすぐ安価の8Core CPUが販売(AMD Ryzen to be launched in 2 March)されるのに、Threadの数をSystem側に制御されちゃうのも嫌だなぁと思って。
945:デフォルトの名無しさん (アウアウエー Sa7f-ykbm)
17/02/17 11:27:15.67 EBBNx7lQa.net
これ読め
URLリンク(developer.apple.com)
946:デフォルトの名無しさん (ワッチョイ 5fc9-fFgi)
17/02/17 11:43:43.16 Ev3rlX/U0.net
vDSP使おう
947:デフォルトの名無しさん (ササクッテロリ Sp9f-X9Uf)
17/02/17 12:41:49.31 zNlklL+qp.net
>>925がgoを学んだら発狂しそうww
イマドキSystem任せにしない方が不安定だろうに、大学の課題か何かかな
948:デフォルトの名無しさん (ワッチョイ 8bc9-ykbm)
17/02/17 13:16:03.93 Akp7bstt0.net
>>929
RubyのコードをSwiftに移植しようとしてます。
Mutexを使ってクリティカルセクションを設定したり、走り始めたThreadを待ち合わせるのはSwiftのFoundationモジュールのThreadクラスでどうするのかなぁ?と
思ってお尋ねした次第です。
949:デフォルトの名無しさん (スプッッ Sd7f-PET2)
17/02/17 13:18:54.00 aT4GW3VEd.net
老がいってやつかにゃ
950:デフォルトの名無しさん (スフッ Sd7f-yXFx)
17/02/17 13:27:17.49 g7uCN/FDd.net
>>925
ThreadクラスもPスレッドも非推奨だから仕方がない
まずはOpeationQueueあたり使って見たら?
もちろん使用するスレッド数も制御できるよ
推奨の方法でどうしてもダメな理由が出てきてから
ThreadクラスやPスレッドに手を出したらいい
951:デフォルトの名無しさん (アウアウエー Sa7f-ykbm)
17/02/17 13:33:47.11 zATlaFwqa.net
>>930
>>927の29ページ読んだか?
952:デフォルトの名無しさん (ワッチョイ 8bc9-ykbm)
17/02/17 14:20:38.36 Akp7bstt0.net
>>932
>>933
THX a lot
色々読んで、修行します。
953:デフォルトの名無しさん (ワッチョイ 8bc9-ykbm)
17/02/17 14:28:58.70 Akp7bstt0.net
>>931
はい、大当たり。
老害エンジニアです。
954:デフォルトの名無しさん (ワッチョイ 5fc9-fFgi)
17/02/17 18:25:26.76 Ev3rlX/U0.net
Swift 4 Release Process
URLリンク(swift.org)
955:デフォルトの名無しさん (ワッチョイ 8b5b-fFgi)
17/02/17 19:22:45.52 FaJoTYRf0.net
Application Binary Interface (ABI)
の安定化が最優先課題だって。
956:デフォルトの名無しさん (ワッチョイ 6b7b-ea4t)
17/02/17 19:26:10.74 nctM8eJ40.net
ruby扱ってるなら30行くか行かないかの小僧だろ・・・
老害に至る以前の世間知らずだにゃー
957:デフォルトの名無しさん (ワッチョイ 8b5b-fFgi)
17/02/17 21:58:24.45 FaJoTYRf0.net
String Processing For Swift 4
Swift4ではString周りが大改革されるって。
現状のIndexを使った文字列アクセスは、なんかしっくりこなかったんだよなぁ。直感的では無かったし、やっぱり文字列は整数を使ってアクセスできなきゃダメだワサァ。
958:デフォルトの名無しさん (ワッチョイ fb17-yXFx)
17/02/17 22:02:19.90 gUVhRjes0.net
仕様が落ち着いたら起こしてくれ
959:デフォルトの名無しさん (ワッチョイ 3b3c-eq+O)
17/02/17 22:20:48.18 uN4QBy3G0.net
それが彼の最期の言葉だった
960:デフォルトの名無しさん (ワッチョイ eb33-MFap)
17/02/17 22:39:06.54 7wkNsQja0.net
それは私の課題ではありません
961:デフォルトの名無しさん (ワッチョイ 5f3c-extS)
17/02/18 00:59:35.29 OUHo6iYG0.net
文字列処理って言語の肝じゃん。
破壊的な変更入れていいものかねぇ。
962:デフォルトの名無しさん (ワッチョイ 0fba-PET2)
17/02/18 01:13:55.79 3KSwEFyS0.net
言語バージョン対応という仕事を作ってくれるswift
963:デフォルトの名無しさん (アウアウエー Sa7f-ykbm)
17/02/18 01:17:55.48 rKwnwDJ5a.net
内部コードを今さらUTF16にするとか言わんよな
964:デフォルトの名無しさん (ワッチョイ 6b7b-ea4t)
17/02/18 07:40:22.96 XfVC26Fr0.net
文字列の扱いなんてbetaから1.xの頃って半年に一回破壊変更あったし大丈夫、大丈夫
それを笑い飛ばせないSwift使いなんているわけない
965:デフォルトの名無しさん (ワッチョイ eb33-MFap)
17/02/18 07:51:02.96 KOOSHa+W0.net
至高の言語Swift
966:デフォルトの名無しさん (ワッチョイ 8b5b-fFgi)
17/02/18 09:32:42.49 bxFvL8ai0.net
JavaScriptも毎年変更されてるから、最近はどこも、そんな感じなんだろう。
ECMA2015, 2016, 2017
967:デフォルトの名無しさん (ワッチョイ 8b5b-fFgi)
17/02/18 09:34:20.94 bxFvL8ai0.net
>>945
それは無い。
Unicode界隈はUTF-8で落ち着いている。
絵文字の増加が毎年の話題で、大した話では無い。
968:デフォルトの名無しさん (アウアウエー Sa7f-ykbm)
17/02/18 10:20:12.36 wNEbwMAxa.net
Swiftの文字列の内部コードはユニコードスカラー値って書いてあったんだが
969:デフォルトの名無しさん (ワッチョイ df93-yXFx)
17/02/18 10:29:13.37 CZJbBrsK0.net
>>950
それを言うなら文字列の内部表現を想定しちゃいけないと書いてあるだろ
NSStringを与えて作ったStrungの内部表現はNSStringになって、
そうじゃない場合内部表現はユニコードスカラーになったり、
他の文字列への参照になったりするわけだから
970:デフォルトの名無しさん (アウアウエー Sa7f-ykbm)
17/02/18 10:54:09.73 wNEbwMAxa.net
想定するも何も想定しようがないんだが
971:デフォルトの名無しさん (ワッチョイ db3c-yXFx)
17/02/18 11:41:47.59 NSF889Ks0.net
import UIKit
import AVFoundation
class ViewController: UIViewController,
AVAudioPlayerDelegate {
var audioPlayer:AVAudioPlayer!
@IBOutlet var button:UIButton!
override func viewDidLoad() {
super.viewDidLoad()
// 再生する audio ファイルのパスを取得
let audioPath = Bundle.main.path(forResource: "sample", ofType:"m4r")!
let audioUrl = URL(fileURLWithPath: audioPath)
// auido を再生するプレイヤーを作成する
var audioError:NSError?
do {
audioPlayer = try AVAudioPlayer
(contentsOf: audioUrl)
}
catch let error as NSError {
audioError = error
audioPlayer = nil
}
972:デフォルトの名無しさん (ワッチョイ db3c-yXFx)
17/02/18 11:44:02.26 NSF889Ks0.net
>>953
// エラーが起きたとき
if let error = audioError {
print("Error \(error.localizedDescription)"
)
}
audioPlayer.delegate = self
audioPlayer.prepareToPlay ()
}
// ボタンがタップされた時の処理
@IBAction func button(_ sender: AnyObject
) {
if ( audioPlayer.isPlaying ){
audioPlayer.stop()
button.setTitle("Stop", for: UIControlState
())
}
else{
audioPlayer.play()
button.setTitle("Play", for: UIControlState
())
}
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}
ボタンを押すと音がなるアプリを作りたくて上記のコードで実行してみたんだけど「SIGABRT」「NSInvalidArgumentException」「unrecognized selector sent to instance」
こんなエラーが出る
初心者でおかしな質問してるかもしれない
もしよかったらどこを直せばいいか教えてほしい
973:デフォルトの名無しさん (スップ Sd7f-MFap)
17/02/18 12:00:29.34 yNmDyf4Id.net
至極の言語Swift
974:デフォルトの名無しさん (ワッチョイ 5fc9-fFgi)
17/02/18 12:43:28.88 ss3TDen/0.net
SwiftのStringの内部表現はこれと決まってるわけではないが、今のところASCIIかUTF-16かNSStringのラッパー
「内部コード」が「内部表現」ではなく「何を文字とするか」ならCharacterはユニコードのextended grapheme clusterで、各種文字列操作もそれに準じるのはSwift4前後でも変わらない
>>949
UTF-8で落ち着いてるというのはファイルのエンコーディングの話
ファイルのエンコーディングなら持ち回しやすさを考えてデータサイズが小さくてバイトオーダーを考慮しなくていいUTF-8が主流だし、
言語やOSの内部表現なら(サロゲートはあるが一応/昔は)固定長でUTF-32ほどは大きくないUTF-16が主流
>>950
どこ?
975:デフォルトの名無しさん (ササクッテロラ Sp9f-ykbm)
17/02/18 12:54:59.38 c9HMTA6gp.net
>>956
AppleのSwift本(The Swift Programming Language)に
Behind the scenes, Swift's native String type is build from Unicode scalar values.
って書いてある
976:デフォルトの名無しさん (ワッチョイ 8b5b-fFgi)
17/02/18 13:57:57.19 bxFvL8ai0.net
>>957
Either utf-8, utf-16 or even utf-32 is made from Unicode scalar values, aka Unicode Code Point.
977:デフォルトの名無しさん (ワッチョイ 3b3c-eq+O)
17/02/18 13:58:35.10 oLH7rESg0.net
Swift3のStringの内部表現は_StringCoreが保持していて
ASCIIのみの場合はASCII、それ以外が含まれるとUTF16に切り替わる
NSStringはUTF16
>>954
エラーが起きたらまずエラーメッセージでググれ
978:デフォルトの名無しさん (ワッチョイ eb46-MFap)
17/02/18 14:00:54.45 zBLDkUJj0.net
人類史上最強のモダン言語Swift
979:デフォルトの名無しさん (ワッチョイ 5fc9-fFgi)
17/02/18 14:10:33.53 ss3TDen/0.net
>>957
それはたぶんユニコードスカラーリテラルのことを言ってるんじゃないの
普通のStringは実装が_StringCoreで
URLリンク(github.com)
_StringCoreの中のバッファは以下の3つどれかが選ばれて
public var asciiBuffer: UnsafeMutableBufferPointer<UTF8.CodeUnit>?
public var nativeBuffer: _StringBuffer?
public var cocoaBuffer: _CocoaString?
NSString由来じゃなくASCIIに収まらないなら_StringBufferが使われて、_StringBufferはUTF16
URLリンク(github.com)
C文字列から作る系は全部_StringBufferにデコードされる
URLリンク(github.com)
StaticStringはASCIIかUTF8か単一のUnicodeScalar
URLリンク(github.com)
980:デフォルトの名無しさん (ワッチョイ dfa6-ea4t)
17/02/18 14:14:39.39 YlQzCJd/0.net
>>953
>>954
ストリーボードにあなたが貼り付けたボタンを右クリックしてみて
でてきた画面の中に定義されてない関数があるはずだからそれを消せばOK
981:デフォルトの名無しさん (ワッチョイ 8b5b-fFgi)
17/02/18 14:16:47.01 bxFvL8ai0.net
>>961
あんた凄いなぁ。
俺なんか、Unsafe族が現れたら、クラクラしてきて戦意喪失。
982:デフォルトの名無しさん (ワッチョイ 5f3c-Scgb)
17/02/18 15:30:42.50 yZwtGkz9
983:0.net
984:デフォルトの名無しさん (アウアウエー Sa7f-ykbm)
17/02/18 16:18:43.63 wVqfoazIa.net
>>961
ASCII文字列に、非ASCIIキャラをinsertした後の文字列はどうなるの?
var asciiString: Sting = ...
asciiString.insert("あ", at: s.startIndex)
985:デフォルトの名無しさん (ワッチョイ 3b3c-eq+O)
17/02/18 17:48:34.42 oLH7rESg0.net
UTF16になる
986:デフォルトの名無しさん (アウアウエー Sa7f-ykbm)
17/02/18 18:03:13.63 wVqfoazIa.net
で、非ASCII文字を削除したら、またUTF8に戻るの?
asciiString.remove(at: s.startIndex)
これ毎回チェックしてるとしたら結構なオーバーヘッドな気が...
987:デフォルトの名無しさん (ワッチョイ 5fc9-fFgi)
17/02/18 20:08:14.30 ss3TDen/0.net
s._core.isASCII で見れるよ
988:デフォルトの名無しさん (ササクッテロラ Sp9f-ykbm)
17/02/18 20:49:34.59 c9HMTA6gp.net
非ASCII文字を削除した後の _core.isASCII がfalseって事は、
一旦UTF16にしたらもう、UTF8に戻さないって事?
989:デフォルトの名無しさん (ワッチョイ 0fba-PET2)
17/02/18 21:11:09.55 3KSwEFyS0.net
よくわからんポリシーやな
990:デフォルトの名無しさん (ワッチョイ df93-yXFx)
17/02/18 21:11:54.83 CZJbBrsK0.net
>>969
実行効率を良くするために
元がASCIIならASCIIのまま、元がNSStringならNSStringのまま扱うわけであって
一度ネイティヴに変換したものを元の形式に戻す意味はないだろ?
で、そこらへんの細かいことはコンパイラとライブラリーに任せて
アプリケーションプログラマーには自分のロジック書くのに集中して欲しいから
内部表現を想定するなって事になってるんだと思うよ
991:デフォルトの名無しさん (アウアウエー Sa7f-ykbm)
17/02/18 21:50:54.42 HBZdFR5pa.net
内部表現を想定するって例えばどういう事だろ
許可されてるインフェースを通してしかアクセスできないんだから
想定しようにもできない気がするけど
992:デフォルトの名無しさん (ワッチョイ 5fc9-fFgi)
17/02/18 22:29:50.36 ss3TDen/0.net
コピーオンライトとかでバッファを作り直すときにはasciiだけかどうかチェックして作り直すみたい
var s = "あabc" // sはutf16
s.remove(at: s.startIndex) // sはutf16のまま
var t = s // tはsと同じバッファを参照
t.remove(at: t.startIndex) // コピーオンライトが働いてtがasciiで作り直される
>>972
バイト列を直接操作したいとか、utf8のファイルを読み込むときにいちいち内部表現への変換が走ってほしくないとか?
多分そういうのを想定してString Processing For Swift 4で内部表現を明示的に指定できるUTF8Stringみたいな型も使えるようにするって言ってるんだと思う
まぁ現時点ではほとんどまったく意味ないね
993:デフォルトの名無しさん (ワッチョイ 3b3c-eq+O)
17/02/18 22:31:20.54 oLH7rESg0.net
>>972
それは順序が逆で
想定すべきでないという設計思想がまずあって、その結果今のインターフェイスがある
ただし次は特に高速が求められるケースでは特定の内部表現を前提に出来るようになる予定
994:デフォルトの名無しさん (スフッ Sd7f-yXFx)
17/02/18 23:03:24.02 KQ+hCWpkd.net
>>972
a...zでアルファベット全部が表現できる(無意識にascii系とかを想定、少なくともebsdicではない)
"あい"文字列の"い"を取り出すには4文字目から取り出さなきゃ(無意識にutf8を想定)
アルファベットで100万文字だから1MByteでお釣りがくるぜ(無意識に8bit系を想定)
文字コード値22FFFFを代入する(無意識にUCS4を想定)
てな感じ
どちらかと言うと今までは文字コードの想定を置かないとブログラムを書けない言語が主流だったから
swiftの文字列に対するインターフェースはまどろこしく感じちゃうよね
995:デフォルトの名無しさん (アウアウエー Sa7f-ykbm)
17/02/18 23:26:41.42 HBZdFR5pa.net
>>975
何かの勘違いでそういう想定(今時EBSDICを想定する奴はいないと思うけど)したとしても、
Sting内部に直接アクセスできないんだから、間違えようがない気がするんだけど、
UnsafePointer系の操作で出来ちゃったりするのかな
UnicodeScalarとか名前から明らかなとこにJISコード入れちゃうとかはそれ以前の問題だし
996:デフォルトの名無しさん (アウアウエー Sa7f-ykbm)
17/02/18 23:31:01.65 HBZdFR5pa.net
それとも、こういう想定はダメよってこと?
for ch in 0..<26 {
let s = String(format: "%c", ch+65)
print(s)
}
997:デフォルトの名無しさん (スフッ Sd7f-yXFx)
17/02/18 23:42:15.42 KQ+hCWpkd.net
>>976
うん、少し前の人が書いてくれているように
内部表現とインターフェースを出来るだけ切り離すように設計されてるからね
実際には
アルファベット10文字が
10バイト+アルファになるか
20バイト+アルファになるか
40バイト+アルファになるか
を考えちゃいけない
ってくらいかな?
998:デフォルトの名無しさん (ワッチョイ eb46-MFap)
17/02/19 00:13:39.56 vGTXfdrY0.net
モダンすぎる言語Swift
999:デフォルトの名無しさん (ササクッテロロ Sp9f-yXFx)
17/02/19 10:00:43.72 x1LhCX3Ip.net
【①1000000】
【②10】【③100】【④1000】
はじめに①で数字を設定
②~④のボタンを押すとその数字だけ①の数字がマイナスされていく
というアプリを作りたいのですが難しいですか?
今まではおみくじアプリや姓名診断アプリしか作ったことがないです
1000:デフォルトの名無しさん (スフッ Sd7f-yXFx)
17/02/19 10:34:46.00 h/cJOvo9d.net
>>980
お前さんの持ってるスキルによる
手慣れた人なら10分でとりあえず動くところまでは作れる
1001:デフォルトの名無しさん (ワッチョイ eb46-MFap)
17/02/19 11:10:03.05 vGTXfdrY0.net
プログラミング史上最強にエレガントでモダンな言語Swiftならおちゃのこさいさいよ
1002:デフォルトの名無しさん (ワッチョイ 8b5b-fFgi)
17/02/19 11:23:30.70 w9YkVXBS0.net
>>982
Visual Studio + C#の方がDesktopアプリは作りやすいよ。
FormにGUI部品を貼り付けただけで、イベントハンドラーがコードに現れる。
Xcode + Swiftも良いと思うよ!
1003:デフォルトの名無しさん (ワッチョイ eb46-MFap)
17/02/19 11:29:31.80 vGTXfdrY0.net
>>983
うん、知ってる
でも最強なんだよ
なんと言ってもApple様御用達の肝入りの言語なんだから
他者の追随を許さない最もエレガントでモダンな言語であることに揺るぎはないのです
1004:デフォルトの名無しさん (ワッチョイ 8b5b-fFgi)
17/02/19 21:30:02.48 nebqvmdd0.net
String.Encoding構造体のメンバに関してAPI Referenceに記述が見つからない。
見つけられないのは俺だけ?
勘で、.utf8ってメンバを想定して、動いてるけど、他にどんなメンバがあるのか気になる。
1005:デフォルトの名無しさん (ワッチョイ df93-yXFx)
17/02/19 22:01:23.21 xeFgM7Gv0.net
>>985
Swift側じゃなくってObjectiv-C側を読むんだよ
あのAPIリファレンスはときどきそう言うのがある
1006:デフォルトの名無しさん (ワッチョイ 8b5b-fFgi)
17/02/19 22:22:31.19 nebqvmdd0.net
>>986
ん?どう言う事?
String構造体ってのはSwiftにしかないので、Obj-C側ってことは、
NSStringのAPI Referenceを見ろって事?
typedef NSUInteger NSStringEncoding;
ってのがあって、NSUTF8StringEncoding = 4らしいんだけど、
これは、String.Encoding構造体とは違うよねぇ。
1007:デフォルトの名無しさん (アウアウエー Sa7f-ykbm)
17/02/19 22:22:46.88 y9mVagiha.net
>>985
ソースみればいいじゃん
Sting.Encodingを右クリックして、「Jump to Definition」を選べばいい
1008:デフォルトの名無しさん (アウアウエー Sa7f-ykbm)
17/02/19 22:25:33.01 y9mVagiha.net
あれ、String.Encodingじゃダメか
String.Encoding.utf8の部分を右クリックすればいける
それか、Option押しながらクリックして、String.Encodingのヘルプ見てもいいけど
1009:デフォルトの名無しさん (ワッチョイ 8b5b-fFgi)
17/02/19 22:28:05.19 nebqvmdd0.net
var out: String = String(data:data, encoding: .utf8)!
out = String(data:data, encoding: .ascii)!
out = String(data:data, encoding: .shiftJIS)!
確かに、NSStringEncodingのAPI Referenceが参考にはなる。
あんがと!
1010:デフォルトの名無しさん (ワッチョイ 8b5b-fFgi)
17/02/19 22:30:35.66 nebqvmdd0.net
まあ、俺はmacOS使ってるけど、uBuntuの人は
String.Encodingどうすんだ?
1011:デフォルトの名無しさん (ワッチョイ 8b5b-fFgi)
17/02/19 22:34:36.24 nebqvmdd0.net
out = String(data:data, encoding: String.Encoding(rawValue:4))!
なんと、NSStringEncodingをAPI Referenceで調べて、
こいつはNSIntegerなので、エンコードの番号をrawValueで指定
するっていう、大変な事をする事でもOKだ。
1012:デフォルトの名無しさん (ワッチョイ 8b5b-fFgi)
17/02/19 23:00:02.23 nebqvmdd0.net
なんと、DashでStringを引いた結果と
XcodeのAPI ReferenceでStringを引いた結果が違う事に気がついた。
特にNested Typeの所が違う。
Xcodeは8.2, Dashは3.4.2だけど、Xcodeは最新版では無いなぁ。
1013:デフォルトの名無しさん (ワッチョイ 0f7b-TuOZ)
17/02/20 00:50:56.72 mClGTBrk0.net
最近のUbuntuだけは、4バイト文字(サロゲートペア)を1文字と数えるらしい
他のOS, Java などでは、2文字と数える
1014:デフォルトの名無しさん (ワッチョイ 0fba-PET2)
17/02/20 00:53:22.30 fz3RD/iA0.net
んなアホな
1015:デフォルトの名無しさん (スッップ Sd7f-yXFx)
17/02/20 09:25:40.12 jVgNOv8dd.net
>>994
LinuxのAPIの話ならwchar_tは32bitだから、
これを使ってるんなら
サロゲートペアという概念は無いし、
Linuxでのwchar_tの1文字は基本的に4バイト
しかし、wchar_tが固定長文字と言う前提が、既に時代遅れになっちゃったなぁ
1016:デフォルトの名無しさん (ワッチョイ 3b3c-eq+O)
17/02/20 10:01:05.56 ChbPWtRt0.net
次スレ
スレリンク(tech板)
1017:デフォルトの名無しさん (ワッチョイ bbbd-ea4t)
17/02/20 12:28:23.27 mI2RJMjC0.net
お前ら文字列の扱い大好きだな
そんなに盛り上がる話なのかよwww
1018:デフォルトの名無しさん (ササクッテロラ Sp9f-BRgT)
17/02/20 12:50:35.35 fp9BsZKPp.net
>>998
じゃあお前が何か盛り上がるネタを投下しろよ
1019:1000ゲト (ワントンキン MM7f-WBM5)
17/02/20 13:02:42.52 sccSrbIhM.net
1000
1020:過去ログ ★
[過去ログ]
■ このスレッドは過去ログ倉庫に格納されています