Swift part9at TECH
Swift part9 - 暇つぶし2ch653:デフォルトの名無しさん (ササクッテロリ Sp87-/mpU)
17/01/25 10:39:46.63 +ZiK5CtYp.net
シングルクォート = UnicodeScalar で言語仕様切るとUnicodeに引っ張られるからでは
古い言語にならってASCIIを想像する人もいれば、今時ならUTF8だと想像する人もいるだろうし、フレームワークに合わせてUnicodeと言う人もいる
落とし所のない不毛な議論が目に見えるから、検討したけど削除した仕様な気がする

654:デフォルトの名無しさん (ワッチョイ c33c-3qL8)
17/01/25 11:04:36.57 2+5m68360.net
でもStringとUnicodeScalarの間にCharacterが入ってるあたりは
既にUnicodeに盛大に引っ張られてる気もする
let c = Character("あ" + "゚")
まぁ何らかの検討はあったんだろうけど・・・

655:デフォルトの名無しさん (ワッチョイ 734c-JNK/)
17/01/25 20:41:52.96 RfIl6u1t0.net
Swiftって確かに字数は少ないかもしれないが読みやすいかっていうと…

656:デフォルトの名無しさん (アウアウウー Sa67-WaXM)
17/01/25 20:56:49.37 xQi6cekNa.net
じゃあ読みやすい言語ってどれだよ

657:デフォルトの名無しさん (スプッッ Sd1f-CBoF)
17/01/25 21:09:38.61 d9MKwq+md.net
cobol

658:デフォルトの名無しさん (ワッチョイ 1342-3qL8)
17/01/25 22:58:32.84 CYUx5EoW0.net
Java
Java
Java
Java
Java

659:デフォルトの名無しさん (ワッチョイ 1342-3qL8)
17/01/25 23:07:52.05 CYUx5EoW0.net
とおもったけどC#

660:デフォルトの名無しさん (ワッチョイ 1342-3qL8)
17/01/25 23:12:20.50 CYUx5EoW0.net
>>642
Swift字数おおくないか
ライブラリの名前がいちいち長ったらしいし
関数に引数の名前2つがデフォとかげんなりするし
try!に至ってはもう

661:デフォルトの名無しさん (ワッチョイ 0f4c-2P18)
17/01/26 01:40:32.20 9A8WN5h/0.net
>>647
そ、そうね…
落ち着いて考えるとCで簡潔に書けることも長ったらしいし、それでいて読みにくい
Swiftって一体どこがいいんだろう…

662:デフォルトの名無しさん (ワッチョイ 2b10-Ve17)
17/01/26 02:37:16.34 dAEo4WV40.net
引数名がない言語の方が見た目はシンプルだけど、特にtrue/falseだけのパラメータとかだと何してるかわかんないときがあって今となってはイラッとするな。
obj.doSomething(true, false, true)みたいなやつ
標準APIだとそういうのは良くないってわかってるのかあんまりないけど、誰かが適当に作ったライブラリだとそんなのがよく出てくる気がする

663:デフォルトの名無しさん (スッップ Sdca-2P18)
17/01/26 03:07:53.57 26kSGCXVd.net
Swiftのラベル機能、アンダーバーってなんだよ
クソ過ぎやしないか?
Objective-Cのままでいいわまじで

664:デフォルトの名無しさん (ワッチョイ 833c-AZYz)
17/01/26 07:35:18.87 8RDF259k0.net
トレーリングクロージャは良い点
それとクロージャ構文にプレフィックスが不要なところも
代わりにスコープブロックにdoが必要だけど2文字は許容範囲内

665:デフォルトの名無しさん (ワッチョイ 7e0d-Spol)
17/01/26 08:13:25.19 O9H7zUJg0.net
>>641
Stringのメンバを見るとCharacterとUnicodeScalarは同列っぽいよ
どちらもUnicodeを内


666:部エンコードに扱ってるからそれらはUnicode依存のフレームワークの様子だけど 同じ層にUTF8, UTF16もいるからいつかCharacterUTF8, UTF8Scalarみたいな構造体もできるかもなw



667:デフォルトの名無しさん (ワッチョイ 833c-AZYz)
17/01/26 09:33:06.97 8RDF259k0.net
>>652
String.initに格差があってね
この差も疑問なんだけど
let ca:[Character] = ["a", "b", "c"]
let ua:[UnicodeScalar] = ["a", "b", "c"]
let cs = String(ca)
let us = String(ua) //これが出来ない
let us = String(ua.map(Character.init)) //これは出来る

668:デフォルトの名無しさん (アウアウウー Sa7f-4cPM)
17/01/26 10:39:40.20 k8NBikxqa.net
Swiftに慣れるとSwift以外でのコーディングが煩わしくなるぞ
varとletの明確な使い分けも、それがない言語だと逆にモヤッとする

669:デフォルトの名無しさん (ワッチョイ 6ac9-P4zY)
17/01/26 10:57:10.28 KCQLgRNZ0.net
Stringに関して言いたいことはメーリスで今のうちに言っとけよ
今ちょうどSwift4でStringどうするか議論の真っ最中だから

670:デフォルトの名無しさん (ササクッテロリ Sp13-vNtw)
17/01/26 11:04:45.63 CKOy8ZWqp.net
4は破壊変更なしで、5の破壊変更混みで直すからまだ時間はあるなw
>>653もCharacterとUnicodeScalarをまとめた上位インターフェース作るだろ(適当

671:デフォルトの名無しさん (オイコラミネオ MM76-bF0B)
17/01/26 11:10:44.87 NOZ2YrK+M.net
オプショナルバインディングの利点ってなんだろう?
言葉で説明するのは難しいですわ
nilチェックして強制アンラップでもいいだろって思われそう
どう思う?

672:デフォルトの名無しさん (オイコラミネオ MM76-bF0B)
17/01/26 11:15:35.23 NOZ2YrK+M.net
と思っけど失敗のあるイニシャライザ使う時めっちゃ便利だわ
Appleのリファレンスは説得力あるわ

673:デフォルトの名無しさん (ワッチョイ 1b3c-R94c)
17/01/26 23:16:58.81 ufLIfALs0.net
BB2C使って書き込みしてるけど、こういうブラウザアプリってどうやって作られてるの?
初心者だから全然想像できん

674:デフォルトの名無しさん (ササクッテロリ Sp13-vNtw)
17/01/27 08:27:01.41 Zy0rRYCMp.net
>>659
定期乙

675:デフォルトの名無しさん (ワッチョイ 6f5b-ci5U)
17/01/27 17:31:32.73 MVo+YM4y0.net
>>650
俺は重宝してるけど。
_ = someMethod()

676:デフォルトの名無しさん (ササクッテロリ Sp13-vNtw)
17/01/29 13:24:08.53 MpcYD/kyp.net
let宣言しなくても変数_って使えたのか
いつ変わったんだ、便利じゃねーか

677:デフォルトの名無しさん (ワッチョイ 833c-T3y8)
17/01/29 14:08:41.99 PyqVv5fH0.net
>>662
宣言じゃなくて、定義じゃね?

678:デフォルトの名無しさん (ワッチョイ 9733-4cPM)
17/01/29 15:05:33.45 3Y3DXVvV0.net
アンダーバーってクソすぎやしないか

679:デフォルトの名無しさん (ササクッテロラ Sp13-4cPM)
17/01/29 15:25:26.09 yL6xb8U5p.net
アンダーバーでいいと思います。

680:デフォルトの名無しさん (ワッチョイ 833c-T3y8)
17/01/29 17:02:22.62 PyqVv5fH0.net
アンダスコア

681:デフォルトの名無しさん (スッップ Sdca-2P18)
17/01/29 17:03:21.38 htBmfO4kd.net
アンダースコアや三点リーダー、クソ過ぎやしないか

682:デフォルトの名無しさん (アウアウウー Sa7f-4cPM)
17/01/29 17:19:12.25 EnysbUOea.net
許容範囲だと思います。

683:デフォルトの名無しさん (ワッチョイ 9739-4eSF)
17/01/30 07:33:20.34 qYAaUQoA0.net
_ の書き方はともかく
引数にラベルが必須でないというのは
可読性の確保という面で
選択肢として存在するのはアリだと思うな

684:デフォルトの名無しさん (ワッチョイ 2b8c-EfrK)
17/01/30 08:01:35.96 Jmyw1tRr0.net
C APIをSwiftから叩くために選択肢どころか必須機能なんだよなぁ
ObjCみたいにC APIだけは別の表記するならいいけどさ

685:デフォルトの名無しさん (スップ Sdca-eBhG)
17/01/30 09:17:47.99 djGawl3Pd.net
swiftいいよ書きやすいよ
最近の次世代言語は関数型ばかりだからswiftが最後の希望や

686:デフォルトの名無しさん (ワッチョイ 833c-AZYz)
17/01/30 17:37:30.67 5ceKaohv0.net
ネタ
DictionaryのValueをOptionalにした場合の
削除とnil設定のオーバーロード区別
URLリンク(swiftlang.ng.bluemix.net)

687:デフォルトの名無しさん (ワッチョイ 833c-AZYz)
17/01/30 20:30:32.06 5ceKaohv0.net
ついでに今更ながら>>498の対策
URLリンク(swiftlang.ng.bluemix.net)
どちらにも言えることだけど
意味的に異なるオーバーロードがあると厄介

688:デフォルトの名無しさん (ワッチョイ 9733-4cPM)
17/01/31 08:04:31.17 TojTxigN0.net
詳解Swift 第2版と第3版ってやっぱ内容だいぶ違う?
仕様ころころしててイライラしてるんだけど

689:デフォルトの名無しさん (スプッッ Sd6a-eBhG)
17/01/31 09:09:51.57 qlhVwcaGd.net
その程度でイライラするならswift向いてないよ

690:デフォルトの名無しさん (ササクッテロリ Sp13-vNtw)
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の文字列に対するインターフェースはまどろこしく感じちゃうよね


次ページ
最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch