Swift part9 [無断転載禁止]©5ch.io
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん 転載ダメ©2ch.net (ワッチョイ 8b3c-/6Y/)
2016/10/18(火) 11:34:44.16ID:oLo879ze0関連スレ
プログラミング言語Swift 3
http://potato.2ch.net/test/read.cgi/mac/1408762479/
[SDK]iPhoneアプリ開発初心者質問箱47[touch][iPad]
http://potato.2ch.net/test/read.cgi/mac/1470902093/
Xcode part14
http://potato.2ch.net/test/read.cgi/mac/1476190499/
Swiftアンチスレ part1
http://echo.2ch.net/test/read.cgi/tech/1458491343/
前スレ
Swift part8
http://echo.2ch.net/test/read.cgi/tech/1463149806/
VIPQ2_EXTDAT: default:vvvvv:1000:512:----: EXT was configured
0751デフォルトの名無しさん (ワッチョイ 132b-eX/G)
2017/02/06(月) 12:21:28.85ID:QBi3Y3km00752デフォルトの名無しさん (ワッチョイ a317-4SR0)
2017/02/06(月) 12:46:46.20ID:pkGDAQrJ0Swiftだと日本語の関数名も補完されるのか。いいな。
Objective-Cだと日本語が混ざると補完が効かなくなったはず。
0753デフォルトの名無しさん (ブーイモ MMc7-XgLl)
2017/02/06(月) 15:47:59.82ID:0PGGfaNyM他言語ってLLだろどうせ。LLで言語名乗るなよスクリプトっていえよ
TypeScriptでもScalaでもJava (lombok)でもカタいのは全てlabel付きの方向に行ってるのに
この時代に乗れない男を引き取ってくれる優しい言語はこの先現れるのだろうか
破棄、再評価を繰り返すこの業界で全くないとは言い切れんが
0754デフォルトの名無しさん (ワッチョイ 13c9-kDlj)
2017/02/06(月) 16:37:12.35ID:M531ILGV0メソッド呼び出し時にラベルとともに引数を書くのはSwiftだけだと思ってたら、そうじゃないのね?
いまScalaってのをググってみたけど、ラベルなしでメソッド定義、呼び出ししてるみたいだが?
0755デフォルトの名無しさん (アウアウエー Sa5f-kDlj)
2017/02/06(月) 16:51:52.57ID:7LeUyz1la0756デフォルトの名無しさん (ワッチョイ 7f3c-6sTg)
2017/02/06(月) 17:58:08.26ID:+8BGH8XP0呼ぶ側にラベルを強制する必要なんてないでしょ
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が既存ライブラリへの影響を最小限にするための苦肉の策だよ
0757デフォルトの名無しさん (ワッチョイ 7fc9-vqxm)
2017/02/06(月) 18:58:04.37ID:3ZIy1rLW0それ誰かがうっかり
CalculateBMI(height, weight);
って書いてエンバグしてた場合気付けなくね
それともC#って順番じゃなくて変数名で引数に対応付けてくれんの?
JavaScript(ES2015)ではObjectを引数に取ることで疑似名前付き引数にする手法とObject Literal Shorthandの合せ技でそういうこと出来るようになってるけど
0758デフォルトの名無しさん (ササクッテロロ Spa7-kDlj)
2017/02/06(月) 19:38:32.44ID:+DEdH8rPp関数を書いた本人は引数の順番知ってるかもしれんけど、第三者とか未来の自分はどうだろう
0759デフォルトの名無しさん (スプッッ Sd9f-UJvE)
2017/02/06(月) 21:30:09.99ID:2jscAFeGd0760デフォルトの名無しさん (ワッチョイ 633c-vqxm)
2017/02/06(月) 22:16:02.24ID:vLeuYaJ10自分が使う時は見るけれど、後から第三者が書いたコード読むときにいちいち確認するのはめんどくさい
0761デフォルトの名無しさん (ワッチョイ 7f3c-6sTg)
2017/02/06(月) 22:18:34.56ID:+8BGH8XP0>>758
最終的にはテスト書こうねって話だけど
ある程度の補完機能のあるエディタを使ってれば定義を見ながらコード書くから順番が分からないこともないし間違える可能性もすげー低い
それでも可能性はゼロじゃないけどこの手のミスを防ぐためだけなら可読性を犠牲にするほどの価値があるとは思わない
アンスコ書かなくてもデフォルトは省略可能で強制したい時だけ指定できるようにすれば十分
静的型付け言語なんだから型チェックに引っかかるような書き方を楽にできるようにしていくほうが言語としてはいい気がする
0762デフォルトの名無しさん (アウアウエー Sa5f-kDlj)
2017/02/06(月) 22:41:12.32ID:eyNF5CHCa引数の多いAPIとか呼び出す時もわかり易い
そもそも他の言語だって、関数を定義する時は引数名と型を指定するわけで、そこの労力は変わらない(Swiftの場合は、引数名に加えて別のラベル名も指定できるけど、これは別に書かなければ引数名がそのままラベル名になる)し、
関数を呼び出す時も、何度も言うけどXcodeの補完が効くので、tabキー押しながら値を埋めていくだけで特に手間はかからない
そこまでラベルを嫌がる理由が俺には理解できない
0763デフォルトの名無しさん (ワッチョイ 7fc9-vqxm)
2017/02/06(月) 22:48:44.79ID:3ZIy1rLW0static int CalculateBMI(int height, int weight) {...}
に変わってたら?
ラベル書いてればコンパイラが引数間違ってるよって教えてくれるけど、間違える可能性すげー低いという思い込みでラベル書かない人は絶対気付けないよ
テスト書けばいい?
その前にまずラベル書いてくださいよ(苦笑
0764デフォルトの名無しさん (アウアウエー Sa5f-kDlj)
2017/02/06(月) 22:52:49.93ID:eyNF5CHCa可読性を犠牲にって、ラベルのおかけで可読性は上がると思うんだが...
無茶苦茶なラベル名つけてない限り
0765デフォルトの名無しさん (ワッチョイ cfba-UJvE)
2017/02/06(月) 22:57:21.06ID:0dGh9mJF0そんな変更を勝手に加える危ないAPIなんて使わないという選択をまず取る
0766デフォルトの名無しさん (アウアウエー Sa5f-kDlj)
2017/02/06(月) 22:59:24.91ID:eyNF5CHCa0767デフォルトの名無しさん (ワッチョイ 7f3c-6sTg)
2017/02/06(月) 23:29:35.74ID:+8BGH8XP0ラベル書いてたら普通はエラーにならずそのまま使えるよ。Swift以外ではね
可読性が上がるのなら書くしそうじゃないなら書かない、そういう選択肢が無いのが俺は嫌
0768デフォルトの名無しさん (ワッチョイ cf42-qddC)
2017/02/06(月) 23:29:54.33ID:DXHlWVxm0c#、pythonみたいにラベル=仮引数名で十分
0769デフォルトの名無しさん (アウアウエー Sa5f-kDlj)
2017/02/06(月) 23:39:42.35ID:eyNF5CHCa選択肢あるだろ アンスコ( _ )
0770デフォルトの名無しさん (ワッチョイ cfba-UJvE)
2017/02/06(月) 23:57:51.11ID:0dGh9mJF00771デフォルトの名無しさん (アウアウエー Sa5f-kDlj)
2017/02/07(火) 00:02:13.06ID:d/8njjdTaいやそれは昔からあるObj-Cで書かれたAPIの呼び出し方に合わせるためだろ
0772デフォルトの名無しさん (ワッチョイ 7fc9-vqxm)
2017/02/07(火) 00:03:29.25ID:U45A8ASp0API Design Guidelines読めよ
ラベルなし全てが否定されてるわけじゃない
単に面倒だとか安全性を考えてないとか他の言語では〜とかそういうアホな考えでラベルなしを選択するのがアホの極みだっていうだけだ
0773デフォルトの名無しさん (ワッチョイ 7f85-0MWP)
2017/02/07(火) 00:52:48.71ID:ZXoOddG/0自分で設定するの?それとも
ViewControllerのこと?
0774デフォルトの名無しさん (アウアウエー Sa5f-kDlj)
2017/02/07(火) 01:02:31.40ID:d/8njjdTaつうか質問する時に説明を省くんじゃねーよ
Autolayoutの親Viewってどこに書いてあったんだよ
それが書かれた文脈がわからないと想像でしか答えられんわ
つうか疲れたからもう寝る
0775デフォルトの名無しさん (ワッチョイ 7f3c-6sTg)
2017/02/07(火) 02:36:50.69ID:GtuDXK2z0w マジレスするとアンスコにしたらラベル付き呼びたくても呼べない その逆もしかり
関数作る時に他言語では不要な意思決定がSwiftでは必要
言語仕様が変わらない限りどうしようもないからこの話題はこの辺で
0776デフォルトの名無しさん (ササクッテロラ Spa7-kDlj)
2017/02/07(火) 02:51:43.97ID:XrNu72Jopそんな器用なことしたいならオーバーロードすればいいだ
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)
0777デフォルトの名無しさん (スフッ Sd9f-4SR0)
2017/02/07(火) 08:38:57.64ID:7sv3izQhdラベルが要らないと思ったからアンダースコアにしたんだろ?
言ってる事が矛盾してね?
呼び出し時にラベルを付けたいと思うなら
それはラベルを付ける価値があるという事で
強制されたところでだれも不便に思わないよ
0778デフォルトの名無しさん (スフッ Sd9f-4SR0)
2017/02/07(火) 08:41:22.70ID:7sv3izQhd>関数作る時に他言語では不要な意思決定がSwiftでは必要
無自覚に行われる小さな意思決定をプログラマに明示的に自覚させると言うのは
Swiftの設計思想の結構大切なところだと思うよ
0779デフォルトの名無しさん (ワッチョイ c366-4SR0)
2017/02/07(火) 21:14:52.34ID:4jeefcmH00780デフォルトの名無しさん (スフッ Sd9f-4SR0)
2017/02/07(火) 21:31:12.11ID:7sv3izQhd0781デフォルトの名無しさん (ワッチョイ b333-mNHV)
2017/02/07(火) 22:24:06.04ID:ZIH2X64r00782デフォルトの名無しさん (ワッチョイ 7f3c-6sTg)
2017/02/07(火) 22:28:45.43ID:GtuDXK2z0関数作る時に決めるべきことと使う時に決めるべきことの違いを理解しようか
0783デフォルトの名無しさん (アウアウエー Sa5f-kDlj)
2017/02/07(火) 22:42:00.91ID:xaIKpgD2a例えば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)
0784デフォルトの名無しさん (アウアウエー Sa5f-kDlj)
2017/02/07(火) 23:01:01.74ID:xaIKpgD2apublic 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)
}
}
0785デフォルトの名無しさん (ササクッテロリ Spa7-gHkU)
2017/02/07(火) 23:02:03.89ID:EhOLSQDnpそんな真面目に相手しなくても良いだろうに
相手してる子も荒しで、荒し同士の空中戦かもだけど
0786デフォルトの名無しさん (ワッチョイ 7f3c-6sTg)
2017/02/07(火) 23:07:09.27ID:GtuDXK2z0作る時の労力が増えるだけじゃなく使う時にコード補完で区別つかない
現状は一見同じシグニチャに見えるメソッドが2個ずつ並ぶことになる
それでもメリットが上回ると思う場合があったらはオーバーロードすればいいじゃね
0787デフォルトの名無しさん (アウアウエー Sa5f-kDlj)
2017/02/07(火) 23:12:30.28ID:xaIKpgD2aそれよりも早くリファクタリングできるようにしてほしい
Swiftの仕様が完全に固まるまで対応しないつもりかね
0788デフォルトの名無しさん (アウアウエー Sa5f-kDlj)
2017/02/07(火) 23:20:36.88ID:xaIKpgD2a労力?
別バージョンのシグニチャを用意するぐらい然程労力とも思えないけど
全ての引数の組み合わせでラベル有無バージョンを用意したいってのなら別だけど
そこまで自由度を待たせるなら、ディクショナリ一つを引数にして、キーを引数名にした方が、設計意図にあってるかものしれない
0789デフォルトの名無しさん (ワッチョイ a317-4SR0)
2017/02/07(火) 23:35:58.62ID:vFUY1Q6g0ライブラリ毎に流儀が存在したら使い辛い
0790デフォルトの名無しさん (ワッチョイ ff93-4SR0)
2017/02/08(水) 00:37:17.57ID:wuN4GLLw0それホント
リファクタリングアシスト早く欲しい
ちょっとした変数名、関数名の変更でもアシスト無いと億劫でつい放置しちゃう
0791デフォルトの名無しさん (スフッ Sd52-S0So)
2017/02/09(木) 19:29:33.72ID:bGGm+VsddXCodeでもdoxygenでもいいからさ
0792デフォルトの名無しさん (ワッチョイ 9293-S0So)
2017/02/11(土) 08:39:06.29ID:4V1/h4XS0誰か使ってない?
0793デフォルトの名無しさん (ワッチョイ cf3c-S0So)
2017/02/11(土) 15:54:18.34ID:oskBDXOt00794デフォルトの名無しさん (JP 0Hb3-8/DI)
2017/02/11(土) 16:26:02.45ID:bfT7og+wH0795デフォルトの名無しさん (アウアウエー Sa4a-C9ZD)
2017/02/11(土) 16:38:59.73ID:Edv5NWG3a0796デフォルトの名無しさん (ワッチョイ 76ba-9CRV)
2017/02/11(土) 17:08:57.07ID:qQmrAco800797デフォルトの名無しさん (アウアウオー Sa8a-S0So)
2017/02/11(土) 17:19:51.41ID:2PZ2/Gs1aiOS用の言語なら在るだろうから、簡単じゃないかな。
Windowsストアアプリで全く同じ機能作った時に簡単に作れた。
0798デフォルトの名無しさん (ササクッテロラ Spf7-uAX+)
2017/02/11(土) 17:47:29.76ID:8E8IVrXfpいやまぁ理由は分かるんだが
>>793
初心者向けのiOSアプリ開発書籍買ったら良さげ
そろそろ swift 3 に対応した本が出てるだろ
0799デフォルトの名無しさん (ワッチョイ b285-cGUq)
2017/02/11(土) 17:51:07.98ID:ScJtra280C#に比べたら面倒
ボタンを配置して
swiftソースにACTIONでつないで
そこに>797のいうよう
やる感じ
ソースとして書く部分は10行もないかと
0800デフォルトの名無しさん (ワッチョイ f23c-DoU+)
2017/02/11(土) 18:19:38.45ID:ria0yk5C0いろいろやり方あるけどAVFoundationのAVAudioPlayerを使うといいと思う
プログラミング初学者だといくつかはまりポイントあるだろうから困ったら質スレで聞けばいい
let soundURL = Bundle.main.url(forResource: “soundfile”, withExtension: "mp3")!
player = try! AVAudioPlayer(contentsOf: soundURL)
player.play()
0801デフォルトの名無しさん (ワッチョイ 935b-3OfB)
2017/02/11(土) 19:12:24.65ID:SqFaix0v0import 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()
}
0802デフォルトの名無しさん (ワッチョイ cf3c-S0So)
2017/02/11(土) 21:53:00.81ID:oskBDXOt0色々と調べたらAVFoundationのAVAudioPlayer使うことになりそうだ
>>800>>801のコードにボタンをACTIONでつなげれば良さそうだね
0803デフォルトの名無しさん (ワッチョイ f23c-DoU+)
2017/02/11(土) 22:00:59.47ID:ria0yk5C0AVAudioPlayerのインスタンスを保持しておかないと音なる前に回収される
>>802
停止操作とか必要なくただビープ音的に鳴らしたいだけならSystem Sound Serviceってのもある
https://developer.apple.com/reference/audiotoolbox/system_sound_services
0804デフォルトの名無しさん (ワッチョイ 935b-3OfB)
2017/02/12(日) 10:06:48.35ID:jCqP/Xy60こんな感じね。
let soundIdRing:SystemSoundID = 1000 // new-mail.caf
AudioServicesPlaySystemSound(soundIdRing)
http://iphonedevwiki.net/index.php/AudioServices
0805デフォルトの名無しさん (ワッチョイ 52a6-yzHa)
2017/02/12(日) 17:36:05.74ID:wbmA90a/0もしバグなら報告したいけどやり方わからん
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)"
0806デフォルトの名無しさん (アウアウエー Sa4a-C9ZD)
2017/02/12(日) 17:44:34.25ID:al1G+i0ka0807デフォルトの名無しさん (スップ Sd52-a31+)
2017/02/12(日) 18:33:13.51ID:Okkscphrdなんで仕様も知らないのに、バグだって解るの?
0808デフォルトの名無しさん (ワッチョイ 935b-3OfB)
2017/02/12(日) 18:38:31.94ID:jCqP/Xy60var affine = AffineTransform(scale: scale)
affine.append(AffineTransform(rotationByRadians: angle))
print(affine)
0809デフォルトの名無しさん (ワッチョイ f23c-DoU+)
2017/02/12(日) 18:39:48.46ID:ashgYgUc0バグってるぽいね
ここのReporting Bugsのところ見て報告するといいんじゃないかな
https://swift.org/contributing/
どう見ても設定値(m11とか)を読んでない
https://github.com/apple/swift/blob/1b75481ab83ee69485170cb3c44622343be7e6a6/stdlib/public/SDK/Foundation/AffineTransform.swift#L168L179
0810デフォルトの名無しさん (ワッチョイ 935b-3OfB)
2017/02/12(日) 18:39:59.85ID:jCqP/Xy60ところで、API Referenceをどうやって引いてる?
API Referenceなんて見ずに、blogの情報とか、漁ってる?
0811デフォルトの名無しさん (ワッチョイ f23c-DoU+)
2017/02/12(日) 18:43:54.40ID:ashgYgUc0var affine = NSAffineTransform(transform: AffineTransform(scale: scale))
affine.rotate(byRadians: angle)
0812デフォルトの名無しさん (ワッチョイ 935b-3OfB)
2017/02/12(日) 18:45:05.05ID:jCqP/Xy600813デフォルトの名無しさん (ワッチョイ 935b-3OfB)
2017/02/12(日) 19:02:44.16ID:jCqP/Xy600814デフォルトの名無しさん (ワッチョイ 9b33-C9ZD)
2017/02/12(日) 19:45:50.10ID:s4ykSwHK00815デフォルトの名無しさん (ワッチョイ b285-cGUq)
2017/02/12(日) 20:06:38.87ID:/n7GcIvt0再生速度を上げたりさげたりするのは
AVAudioPlayerでできるの?
0816デフォルトの名無しさん (ワッチョイ 935b-3OfB)
2017/02/12(日) 20:27:22.43ID:jCqP/Xy60ここ見ると
swiftコマンドを作るのに2hr位かかるって!ただし、プロセスを1に限定してメモリ不足を回避しているので、プロセスを4にする事で高速化できるかも。多分素直に4倍高速になる。
0817デフォルトの名無しさん (ワッチョイ 935b-3OfB)
2017/02/12(日) 20:28:28.95ID:jCqP/Xy60var rate: Float
The audio player’s playback rate.
ってかまじAPI Referenceみないの?
0818デフォルトの名無しさん (ワッチョイ 935b-3OfB)
2017/02/12(日) 20:55:59.50ID:jCqP/Xy60この本超気になってる。24日(金)までデカイ本屋に行けそうに無い。
田舎住まいなもんで。
どうしよう、中身見ないでAmazonで注文してみっか!
0819デフォルトの名無しさん (ワッチョイ 52a6-yzHa)
2017/02/12(日) 21:30:20.51ID:wbmA90a/0macOSの方です
バグレポートしようとしたらJiraってやつのログイン画面が出てきて詰んだ
0820デフォルトの名無しさん (ワッチョイ 52a6-yzHa)
2017/02/12(日) 21:39:30.82ID:wbmA90a/0基本的にはXCodeでクラス名をコマンドキー押しながらクリックしてる
それでわからなかったらgoogleしてる
0821デフォルトの名無しさん (ワッチョイ f23c-DoU+)
2017/02/12(日) 22:11:58.80ID:ashgYgUc0アカウント作成してバグレポートを上げようよ
結構クリティカルだと思うし世界中のOSX開発者が助かるよ
ついでにテストコードも追加か修正してプルリクエスト上げるといいと思う
affinetransformで検索してもissueは上がってない
https://bugs.swift.org/issues/?jql=text%20~%20"affinetransform"
Openradarに似たようなのあったけど中身ちょっと違う
https://openradar.appspot.com/27793851
0822デフォルトの名無しさん (ワッチョイ 52a6-yzHa)
2017/02/12(日) 22:38:10.12ID:wbmA90a/0頑張ってみる
本当はgithubでプルリクエストしたかったけどswiftコマンドつくるの失敗に終わった
http://swift.orgにWifi(itscom)からだとアクセスできない助けて
携帯からなら繋がる
0823デフォルトの名無しさん (ワッチョイ f23c-DoU+)
2017/02/12(日) 23:24:37.94ID:ashgYgUc0↓swift-corelibs-foundationをクローンしてFoundationだけビルドしてる例
http://dev.iachieved.it/iachievedit/compiling-open-source-swift-foundation/
0824デフォルトの名無しさん (ワッチョイ 52a6-yzHa)
2017/02/12(日) 23:42:42.26ID:wbmA90a/0おーーそんな方法があるのか
ありがとうございます
0825デフォルトの名無しさん (ワッチョイ 932b-yzHa)
2017/02/13(月) 09:03:20.14ID:s7YAQc1O0Class NSAffineTransform と Struct AffineTransform がInterchangableなのであって
Class NSAffineTransform と Class CGAffineTransform が互換あるとは言ってないような...
非publicなメンバの値まで一致させないといけない理由はないと思うんだ
0826デフォルトの名無しさん (ワッチョイ d3c9-C9ZD)
2017/02/13(月) 09:32:07.22ID:2bWgE/rs0仕様が曖昧なので、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を使えばいいワケだから。
0827デフォルトの名無しさん (ワッチョイ 932b-yzHa)
2017/02/13(月) 09:46:33.40ID:s7YAQc1O0そんな馬鹿なw従来この仕様で作って来たソフトがてんやわんやになるわ
いやまぁApple様がそう言うなら仰せの通りにって直すだけだけど
要はNS, CGの互換性はどうでもよくて
AffineTransformの仕様/実装が明記されてなくて気分悪いからバグ報告出そうぜってことか
僕が考えた最強のAffineTransformの仕様/実装が受け入れられるのかねぇ
0828デフォルトの名無しさん (ワッチョイ d3c9-C9ZD)
2017/02/13(月) 09:56:45.14ID:2bWgE/rs0AffineTransformはごく最近に導入されたので、仕様変更することでの混乱はまだ少ない。
Swift3.1, Swift4へとこの変な仕様が受け継がれていくのを防ぐのが得策だと思うなぁ。
0829デフォルトの名無しさん (アウアウエー Sa4a-C9ZD)
2017/02/13(月) 10:11:14.17ID:LkG0cYl2a仕様だとしたら一貫性が無さすぎるし、利用者もそんな挙動は期待してないでしょ
tlanslateメソッドもscaleメソッドも、元の値を反映して更新かけるのに
rotateメソッドだけ、m11〜m22は元の値を破棄して、tX, tYは維持するってのが仕様だとしたら気持ち悪すぎる
0830デフォルトの名無しさん (ワッチョイ 173c-cGUq)
2017/02/13(月) 10:14:16.16ID:+QLG4LyN0appendしてくれる方がいいと思う
public mutating func rotate(byRadians angle: CGFloat) {
append(AffineTransform(rotationByRadians:angle))
}
0831デフォルトの名無しさん (ワッチョイ d3c9-C9ZD)
2017/02/13(月) 10:20:48.39ID:2bWgE/rs0AffineTransformの初期値は単位行列だから、それで良いかも。
0832デフォルトの名無しさん (ワッチョイ d3c9-C9ZD)
2017/02/13(月) 10:21:40.61ID:2bWgE/rs0いや、メソッド呼び出しにはコストがかかるから、m11, m12…とかの値をつかって、ちゃんと計算して欲しい。
0833デフォルトの名無しさん (ワッチョイ d3c9-C9ZD)
2017/02/13(月) 10:37:34.88ID:2bWgE/rs0Mutates an affine transformation matrix
ってコメントと
Creates an affine transformation matrix
っていうコメントが出てくる。
Muattesってのは、行列をappendするっていう意味で使ってるんじゃないかなぁ。
0834デフォルトの名無しさん (ワッチョイ d3c9-C9ZD)
2017/02/13(月) 11:00:26.80ID:2bWgE/rs00835デフォルトの名無しさん (ワッチョイ d3c9-C9ZD)
2017/02/13(月) 11:21:40.06ID:2bWgE/rs0ジェネリックなclassを定義する時<T>とかって型パラメータを記載します。
たとえば
class GeoPoint<T> {
}
ジェネリックなprotocolの定義では型パラメータ(付属型)をこんな具合に記述します。
protocol GeoPoint {
associatedtype T
}
なんで
protocol GeoPoint<T> {
}
って記述方法にならなかったんでしょう?
0836デフォルトの名無しさん (ワッチョイ 173c-cGUq)
2017/02/13(月) 14:12:54.92ID:+QLG4LyN0付属型が先にあって、ジェネリクスは後から実装されたため
手遅れだった
https://github.com/apple/swift/blob/master/docs/GenericsManifesto.md
0837デフォルトの名無しさん (ワッチョイ d3c9-C9ZD)
2017/02/13(月) 14:45:06.42ID:2bWgE/rs0THX!
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) { ... }
}
0838デフォルトの名無しさん (ワッチョイ 52a6-yzHa)
2017/02/13(月) 15:04:45.79ID:E5GyABVO0英語できなすぎてちゃんと伝わるかはわからん
0839デフォルトの名無しさん (ワッチョイ d3c9-C9ZD)
2017/02/13(月) 15:09:24.97ID:2bWgE/rs0あんたは、偉い!
0840デフォルトの名無しさん (ワッチョイ f2c9-3OfB)
2017/02/13(月) 15:19:29.48ID:HAPf6MFC0associated typeは型の関係性を記述するもの、type parameterは型を具体化されるためのもので、そもそも目的が違うってことでしょ
0841デフォルトの名無しさん (ササクッテロリ Spf7-v7A7)
2017/02/13(月) 15:28:56.41ID:M5UvUgvDpこっちのPRを誰か、、、
0842デフォルトの名無しさん (ワッチョイ f23c-DoU+)
2017/02/13(月) 16:16:43.69ID:tn7uWAuX0乙! 全世界が救われた
2回rotateさせるテストケースがあれば防げたろうに
mutaing funcはバグりやすいいい例かも
0843デフォルトの名無しさん (ワッチョイ d3c9-C9ZD)
2017/02/13(月) 16:35:02.82ID:2bWgE/rs0画像やBezierPathとか使わない人には、何のことやら判らんかもね!
0844デフォルトの名無しさん (ワッチョイ d3c9-C9ZD)
2017/02/13(月) 17:09:58.36ID:2bWgE/rs0Report件数は徐々に増えている。ここ90日間を見ると。
単に関心を集めている事を示しているのか、bugが収束していかないのか、どっち?
0845デフォルトの名無しさん (ササクッテロリ Spf7-v7A7)
2017/02/13(月) 17:13:54.68ID:M5UvUgvDp0846デフォルトの名無しさん (ワッチョイ 173c-cGUq)
2017/02/13(月) 18:25:38.76ID:+QLG4LyN0プロトコルを受け取ることは出来ても
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>ですらない
今後もこれで行くのだろう
0847デフォルトの名無しさん (ワッチョイ f2c9-3OfB)
2017/02/13(月) 19:29:14.18ID:HAPf6MFC0Any<Point where .T == Float>って書けるようにするんでしょ
0848デフォルトの名無しさん (ワッチョイ 935b-3OfB)
2017/02/13(月) 21:21:52.09ID:MyT3Jhih0型消去なんて初めて知った。
VBAのVariant型みたいなクラス、構造体を作るんだって。
0849デフォルトの名無しさん (ワッチョイ b7bd-yzHa)
2017/02/13(月) 22:41:44.66ID:6dmT0k850そんな根幹I/Fを何度も変えるなと当時頭痛くなったわw
仕様破壊変更がある5.0までにまだまだ変わりそう
0850デフォルトの名無しさん (ワッチョイ 173c-cGUq)
2017/02/13(月) 23:16:42.44ID:+QLG4LyN0Move where clause to end of declaration(SE-0081)が決定済みなので
その書き方は将来的にも無くなってる
なので実装されても直の型でなくGeneric Type Aliasesを挟んでいく方向になるんじゃないかな
typealias AnyPoint<T> = Any<Point> where .T == T みたいな
例えそれでも _boxを抱えたstruct が消滅するならかなりすっきりするけど
■ このスレッドは過去ログ倉庫に格納されています