トップページ⇒tech
1002コメント383KB

Swift part9 [無断転載禁止]©5ch.io

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん 転載ダメ©2ch.net (ワッチョイ 8b3c-/6Y/)2016/10/18(火) 11:34:44.16ID:oLo879ze0
WWDC2014で発表されたAppleの新言語Swiftについて語りましょう

関連スレ

プログラミング言語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:QBi3Y3km0
>>750は>>748へのレス
0752デフォルトの名無しさん (ワッチョイ a317-4SR0)2017/02/06(月) 12:46:46.20ID:pkGDAQrJ0
>>742
Swiftだと日本語の関数名も補完されるのか。いいな。
Objective-Cだと日本語が混ざると補完が効かなくなったはず。
0753デフォルトの名無しさん (ブーイモ MMc7-XgLl)2017/02/06(月) 15:47:59.82ID:0PGGfaNyM
>>722
他言語ってLLだろどうせ。LLで言語名乗るなよスクリプトっていえよ
TypeScriptでもScalaでもJava (lombok)でもカタいのは全てlabel付きの方向に行ってるのに
この時代に乗れない男を引き取ってくれる優しい言語はこの先現れるのだろうか
破棄、再評価を繰り返すこの業界で全くないとは言い切れんが
0754デフォルトの名無しさん (ワッチョイ 13c9-kDlj)2017/02/06(月) 16:37:12.35ID:M531ILGV0
>>753
メソッド呼び出し時にラベルとともに引数を書くのはSwiftだけだと思ってたら、そうじゃないのね?

いまScalaってのをググってみたけど、ラベルなしでメソッド定義、呼び出ししてるみたいだが?
0755デフォルトの名無しさん (アウアウエー Sa5f-kDlj)2017/02/06(月) 16:51:52.57ID:7LeUyz1la
つ Objective-C
0756デフォルトの名無しさん (ワッチョイ 7f3c-6sTg)2017/02/06(月) 17:58:08.26ID:+8BGH8XP0
>>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が既存ライブラリへの影響を最小限にするための苦肉の策だよ
0757デフォルトの名無しさん (ワッチョイ 7fc9-vqxm)2017/02/06(月) 18:58:04.37ID:3ZIy1rLW0
>>756
それ誰かがうっかり
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:2jscAFeGd
呼び先のメソッド見ればわかるし
0760デフォルトの名無しさん (ワッチョイ 633c-vqxm)2017/02/06(月) 22:16:02.24ID:vLeuYaJ10
>>759
自分が使う時は見るけれど、後から第三者が書いたコード読むときにいちいち確認するのはめんどくさい
0761デフォルトの名無しさん (ワッチョイ 7f3c-6sTg)2017/02/06(月) 22:18:34.56ID:+8BGH8XP0
>>757
>>758
最終的にはテスト書こうねって話だけど
ある程度の補完機能のあるエディタを使ってれば定義を見ながらコード書くから順番が分からないこともないし間違える可能性もすげー低い
それでも可能性はゼロじゃないけどこの手のミスを防ぐためだけなら可読性を犠牲にするほどの価値があるとは思わない
アンスコ書かなくてもデフォルトは省略可能で強制したい時だけ指定できるようにすれば十分

静的型付け言語なんだから型チェックに引っかかるような書き方を楽にできるようにしていくほうが言語としてはいい気がする
0762デフォルトの名無しさん (アウアウエー Sa5f-kDlj)2017/02/06(月) 22:41:12.32ID:eyNF5CHCa
ま人それぞれなのかもの知らんけど、俺はXcodeの補完機能とラベルのおかげでコーディングがすごい楽になったわ
引数の多いAPIとか呼び出す時もわかり易い

そもそも他の言語だって、関数を定義する時は引数名と型を指定するわけで、そこの労力は変わらない(Swiftの場合は、引数名に加えて別のラベル名も指定できるけど、これは別に書かなければ引数名がそのままラベル名になる)し、
関数を呼び出す時も、何度も言うけどXcodeの補完が効くので、tabキー押しながら値を埋めていくだけで特に手間はかからない
そこまでラベルを嫌がる理由が俺には理解できない
0763デフォルトの名無しさん (ワッチョイ 7fc9-vqxm)2017/02/06(月) 22:48:44.79ID:3ZIy1rLW0
ある日API側で
static int CalculateBMI(int height, int weight) {...}
に変わってたら?
ラベル書いてればコンパイラが引数間違ってるよって教えてくれるけど、間違える可能性すげー低いという思い込みでラベル書かない人は絶対気付けないよ

テスト書けばいい?
その前にまずラベル書いてくださいよ(苦笑
0764デフォルトの名無しさん (アウアウエー Sa5f-kDlj)2017/02/06(月) 22:52:49.93ID:eyNF5CHCa
>>761
可読性を犠牲にって、ラベルのおかけで可読性は上がると思うんだが...
無茶苦茶なラベル名つけてない限り
0765デフォルトの名無しさん (ワッチョイ cfba-UJvE)2017/02/06(月) 22:57:21.06ID:0dGh9mJF0
>>763
そんな変更を勝手に加える危ないAPIなんて使わないという選択をまず取る
0766デフォルトの名無しさん (アウアウエー Sa5f-kDlj)2017/02/06(月) 22:59:24.91ID:eyNF5CHCa
予知能力者かな
0767デフォルトの名無しさん (ワッチョイ 7f3c-6sTg)2017/02/06(月) 23:29:35.74ID:+8BGH8XP0
>>763
ラベル書いてたら普通はエラーにならずそのまま使えるよ。Swift以外ではね
可読性が上がるのなら書くしそうじゃないなら書かない、そういう選択肢が無いのが俺は嫌
0768デフォルトの名無しさん (ワッチョイ cf42-qddC)2017/02/06(月) 23:29:54.33ID:DXHlWVxm0
>>735
c#、pythonみたいにラベル=仮引数名で十分
0769デフォルトの名無しさん (アウアウエー Sa5f-kDlj)2017/02/06(月) 23:39:42.35ID:eyNF5CHCa
>>767
選択肢あるだろ アンスコ( _ )
0770デフォルトの名無しさん (ワッチョイ cfba-UJvE)2017/02/06(月) 23:57:51.11ID:0dGh9mJF0
xcodeが最初に自動生成するコードもアンダースコア付いてるんだよなあ
0771デフォルトの名無しさん (アウアウエー Sa5f-kDlj)2017/02/07(火) 00:02:13.06ID:d/8njjdTa
>>770
いやそれは昔からあるObj-Cで書かれたAPIの呼び出し方に合わせるためだろ
0772デフォルトの名無しさん (ワッチョイ 7fc9-vqxm)2017/02/07(火) 00:03:29.25ID:U45A8ASp0
>>770
API Design Guidelines読めよ
ラベルなし全てが否定されてるわけじゃない
単に面倒だとか安全性を考えてないとか他の言語では〜とかそういうアホな考えでラベルなしを選択するのがアホの極みだっていうだけだ
0773デフォルトの名無しさん (ワッチョイ 7f85-0MWP)2017/02/07(火) 00:52:48.71ID:ZXoOddG/0
Autolayoutの親Viewって何?
自分で設定するの?それとも
ViewControllerのこと?
0774デフォルトの名無しさん (アウアウエー Sa5f-kDlj)2017/02/07(火) 01:02:31.40ID:d/8njjdTa
レイアウト対象になってるViewの親Viewのことじゃねーの?
つうか質問する時に説明を省くんじゃねーよ
Autolayoutの親Viewってどこに書いてあったんだよ
それが書かれた文脈がわからないと想像でしか答えられんわ
つうか疲れたからもう寝る
0775デフォルトの名無しさん (ワッチョイ 7f3c-6sTg)2017/02/07(火) 02:36:50.69ID:GtuDXK2z0
>>769
w マジレスするとアンスコにしたらラベル付き呼びたくても呼べない その逆もしかり
関数作る時に他言語では不要な意思決定がSwiftでは必要
言語仕様が変わらない限りどうしようもないからこの話題はこの辺で
0776デフォルトの名無しさん (ササクッテロラ Spa7-kDlj)2017/02/07(火) 02:51:43.97ID:XrNu72Jop
>>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)
0777デフォルトの名無しさん (スフッ Sd9f-4SR0)2017/02/07(火) 08:38:57.64ID:7sv3izQhd
>>775
ラベルが要らないと思ったからアンダースコアにしたんだろ?
言ってる事が矛盾してね?

呼び出し時にラベルを付けたいと思うなら
それはラベルを付ける価値があるという事で
強制されたところでだれも不便に思わないよ
0778デフォルトの名無しさん (スフッ Sd9f-4SR0)2017/02/07(火) 08:41:22.70ID:7sv3izQhd
>>775
>関数作る時に他言語では不要な意思決定がSwiftでは必要

無自覚に行われる小さな意思決定をプログラマに明示的に自覚させると言うのは
Swiftの設計思想の結構大切なところだと思うよ
0779デフォルトの名無しさん (ワッチョイ c366-4SR0)2017/02/07(火) 21:14:52.34ID:4jeefcmH0
それでなにかよくなるのかね
0780デフォルトの名無しさん (スフッ Sd9f-4SR0)2017/02/07(火) 21:31:12.11ID:7sv3izQhd
もちろん!
0781デフォルトの名無しさん (ワッチョイ b333-mNHV)2017/02/07(火) 22:24:06.04ID:ZIH2X64r0
具体的におなしゃす
0782デフォルトの名無しさん (ワッチョイ 7f3c-6sTg)2017/02/07(火) 22:28:45.43ID:GtuDXK2z0
>>778
関数作る時に決めるべきことと使う時に決めるべきことの違いを理解しようか
0783デフォルトの名無しさん (アウアウエー Sa5f-kDlj)2017/02/07(火) 22:42:00.91ID:xaIKpgD2a
関数の仕様は作る側が使いやすいように決めればいいことだし、使う側は設計者の意図を汲み取ってそれに従うか、使いにくいと思ったら、継承するなり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)
0784デフォルトの名無しさん (アウアウエー Sa5f-kDlj)2017/02/07(火) 23:01:01.74ID:xaIKpgD2a
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)
 }
}
0785デフォルトの名無しさん (ササクッテロリ Spa7-gHkU)2017/02/07(火) 23:02:03.89ID:EhOLSQDnp
オプショナルで荒らしてたヤツが、キーワード_で荒らしてるだけだから
そんな真面目に相手しなくても良いだろうに

相手してる子も荒しで、荒し同士の空中戦かもだけど
0786デフォルトの名無しさん (ワッチョイ 7f3c-6sTg)2017/02/07(火) 23:07:09.27ID:GtuDXK2z0
>>783
作る時の労力が増えるだけじゃなく使う時にコード補完で区別つかない
現状は一見同じシグニチャに見えるメソッドが2個ずつ並ぶことになる
それでもメリットが上回ると思う場合があったらはオーバーロードすればいいじゃね
0787デフォルトの名無しさん (アウアウエー Sa5f-kDlj)2017/02/07(火) 23:12:30.28ID:xaIKpgD2a
まぁXcodeの補完はまだ改善の余地があるということで
それよりも早くリファクタリングできるようにしてほしい
Swiftの仕様が完全に固まるまで対応しないつもりかね
0788デフォルトの名無しさん (アウアウエー Sa5f-kDlj)2017/02/07(火) 23:20:36.88ID:xaIKpgD2a
>>786
労力?
別バージョンのシグニチャを用意するぐらい然程労力とも思えないけど
全ての引数の組み合わせでラベル有無バージョンを用意したいってのなら別だけど
そこまで自由度を待たせるなら、ディクショナリ一つを引数にして、キーを引数名にした方が、設計意図にあってるかものしれない
0789デフォルトの名無しさん (ワッチョイ a317-4SR0)2017/02/07(火) 23:35:58.62ID:vFUY1Q6g0
柔軟性が高過ぎるのも考えものだね
ライブラリ毎に流儀が存在したら使い辛い
0790デフォルトの名無しさん (ワッチョイ ff93-4SR0)2017/02/08(水) 00:37:17.57ID:wuN4GLLw0
>>787
それホント
リファクタリングアシスト早く欲しい
ちょっとした変数名、関数名の変更でもアシスト無いと億劫でつい放置しちゃう
0791デフォルトの名無しさん (スフッ Sd52-S0So)2017/02/09(木) 19:29:33.72ID:bGGm+Vsdd
あとクラス図生成機能欲しい
XCodeでもdoxygenでもいいからさ
0792デフォルトの名無しさん (ワッチョイ 9293-S0So)2017/02/11(土) 08:39:06.29ID:4V1/h4XS0
オムニグラフってswiftのクラス図作成に対応してるの?
誰か使ってない?
0793デフォルトの名無しさん (ワッチョイ cf3c-S0So)2017/02/11(土) 15:54:18.34ID:oskBDXOt0
プログラミング初心者で勉強のためにボタンを押したら効果音が出るという単純なアプリを作りたいんだけど難しい?
0794デフォルトの名無しさん (JP 0Hb3-8/DI)2017/02/11(土) 16:26:02.45ID:bfT7og+wH
swiftにこだわるな
0795デフォルトの名無しさん (アウアウエー Sa4a-C9ZD)2017/02/11(土) 16:38:59.73ID:Edv5NWG3a
考えるな、感じろ
0796デフォルトの名無しさん (ワッチョイ 76ba-9CRV)2017/02/11(土) 17:08:57.07ID:qQmrAco80
聞いて感じて考えて
0797デフォルトの名無しさん (アウアウオー Sa8a-S0So)2017/02/11(土) 17:19:51.41ID:2PZ2/Gs1a
swiftは使った事ないけど、AudioPlayerクラスとかあれば、音声ファイル読み込んで、Playメソッドとかで鳴らせるはず。
iOS用の言語なら在るだろうから、簡単じゃないかな。
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:ScJtra280
>>793
C#に比べたら面倒

ボタンを配置して
swiftソースにACTIONでつないで
そこに>797のいうよう
やる感じ

ソースとして書く部分は10行もないかと
0800デフォルトの名無しさん (ワッチョイ f23c-DoU+)2017/02/11(土) 18:19:38.45ID:ria0yk5C0
>>793
いろいろやり方あるけど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:SqFaix0v0
>>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()
}
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:ria0yk5C0
>>801
AVAudioPlayerのインスタンスを保持しておかないと音なる前に回収される

>>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
>>803
こんな感じね。

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
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)"
0806デフォルトの名無しさん (アウアウエー Sa4a-C9ZD)2017/02/12(日) 17:44:34.25ID:al1G+i0ka
AffineTransformって、どっから持ってきたの?
0807デフォルトの名無しさん (スップ Sd52-a31+)2017/02/12(日) 18:33:13.51ID:Okkscphrd
>>805
なんで仕様も知らないのに、バグだって解るの?
0808デフォルトの名無しさん (ワッチョイ 935b-3OfB)2017/02/12(日) 18:38:31.94ID:jCqP/Xy60
>>805
var affine = AffineTransform(scale: scale)
affine.append(AffineTransform(rotationByRadians: angle))
print(affine)
0809デフォルトの名無しさん (ワッチョイ f23c-DoU+)2017/02/12(日) 18:39:48.46ID:ashgYgUc0
>>805
バグってるぽいね
ここの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
>>805
ところで、API Referenceをどうやって引いてる?
API Referenceなんて見ずに、blogの情報とか、漁ってる?
0811デフォルトの名無しさん (ワッチョイ f23c-DoU+)2017/02/12(日) 18:43:54.40ID:ashgYgUc0
NSAffineTransformとInterchangableって言ってるのにこうやったら結果変わるんだからバグでしょ

var affine = NSAffineTransform(transform: AffineTransform(scale: scale))
affine.rotate(byRadians: angle)
0812デフォルトの名無しさん (ワッチョイ 935b-3OfB)2017/02/12(日) 18:45:05.05ID:jCqP/Xy60
俺、夕飯の準備するわぁ
0813デフォルトの名無しさん (ワッチョイ 935b-3OfB)2017/02/12(日) 19:02:44.16ID:jCqP/Xy60
俺もbugに思えてきた。
0814デフォルトの名無しさん (ワッチョイ 9b33-C9ZD)2017/02/12(日) 19:45:50.10ID:s4ykSwHK0
殺虫剤はよ
0815デフォルトの名無しさん (ワッチョイ b285-cGUq)2017/02/12(日) 20:06:38.87ID:/n7GcIvt0
mp3とかの曲の再生で
再生速度を上げたりさげたりするのは
AVAudioPlayerでできるの?
0816デフォルトの名無しさん (ワッチョイ 935b-3OfB)2017/02/12(日) 20:27:22.43ID:jCqP/Xy60
http://kyoshiaki.hatenablog.com/entry/2016/01/24/125641

ここ見ると
swiftコマンドを作るのに2hr位かかるって!ただし、プロセスを1に限定してメモリ不足を回避しているので、プロセスを4にする事で高速化できるかも。多分素直に4倍高速になる。
0817デフォルトの名無しさん (ワッチョイ 935b-3OfB)2017/02/12(日) 20:28:28.95ID:jCqP/Xy60
>>815
var rate: Float
The audio player’s playback rate.

ってかまじAPI Referenceみないの?
0818デフォルトの名無しさん (ワッチョイ 935b-3OfB)2017/02/12(日) 20:55:59.50ID:jCqP/Xy60
Swift実践入門 ── 直感的な文法と安全性を兼ね備えた言語 (WEB+DB PRESS plus)

この本超気になってる。24日(金)までデカイ本屋に行けそうに無い。
田舎住まいなもんで。

どうしよう、中身見ないでAmazonで注文してみっか!
0819デフォルトの名無しさん (ワッチョイ 52a6-yzHa)2017/02/12(日) 21:30:20.51ID:wbmA90a/0
申し訳ないAffineTransformはiOSにはなかった
macOSの方です
バグレポートしようとしたらJiraってやつのログイン画面が出てきて詰んだ
0820デフォルトの名無しさん (ワッチョイ 52a6-yzHa)2017/02/12(日) 21:39:30.82ID:wbmA90a/0
>>810
基本的にはXCodeでクラス名をコマンドキー押しながらクリックしてる
それでわからなかったらgoogleしてる
0821デフォルトの名無しさん (ワッチョイ f23c-DoU+)2017/02/12(日) 22:11:58.80ID:ashgYgUc0
>>819
アカウント作成してバグレポートを上げようよ
結構クリティカルだと思うし世界中の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
>>820
頑張ってみる
本当はgithubでプルリクエストしたかったけどswiftコマンドつくるの失敗に終わった
http://swift.orgにWifi(itscom)からだとアクセスできない助けて
携帯からなら繋がる
0823デフォルトの名無しさん (ワッチョイ f23c-DoU+)2017/02/12(日) 23:24:37.94ID:ashgYgUc0
swiftコマンドとかはすでにあるやつ(Xcodeの最新版の)を使えばいいんでは?
↓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
>>823
おーーそんな方法があるのか
ありがとうございます
0825デフォルトの名無しさん (ワッチョイ 932b-yzHa)2017/02/13(月) 09:03:20.14ID:s7YAQc1O0
NSとCGで挙動が違うのは正規仕様なんでは?
Class NSAffineTransform と Struct AffineTransform がInterchangableなのであって
Class NSAffineTransform と Class CGAffineTransform が互換あるとは言ってないような...
非publicなメンバの値まで一致させないといけない理由はないと思うんだ
0826デフォルトの名無しさん (ワッチョイ d3c9-C9ZD)2017/02/13(月) 09:32:07.22ID:2bWgE/rs0
>>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を使えばいいワケだから。
0827デフォルトの名無しさん (ワッチョイ 932b-yzHa)2017/02/13(月) 09:46:33.40ID:s7YAQc1O0
> 仕様変更と同時に、rotateメソッドの実装の変更をrequestした方が良い
そんな馬鹿なw従来この仕様で作って来たソフトがてんやわんやになるわ
いやまぁApple様がそう言うなら仰せの通りにって直すだけだけど

要はNS, CGの互換性はどうでもよくて
AffineTransformの仕様/実装が明記されてなくて気分悪いからバグ報告出そうぜってことか
僕が考えた最強のAffineTransformの仕様/実装が受け入れられるのかねぇ
0828デフォルトの名無しさん (ワッチョイ d3c9-C9ZD)2017/02/13(月) 09:56:45.14ID:2bWgE/rs0
>>827
AffineTransformはごく最近に導入されたので、仕様変更することでの混乱はまだ少ない。
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:+QLG4LyN0
https://github.com/apple/swift/blob/master/stdlib/public/SDK/Foundation/AffineTransform.swift#L168

appendしてくれる方がいいと思う

public mutating func rotate(byRadians angle: CGFloat) {
  append(AffineTransform(rotationByRadians:angle))
}
0831デフォルトの名無しさん (ワッチョイ d3c9-C9ZD)2017/02/13(月) 10:20:48.39ID:2bWgE/rs0
>>830
AffineTransformの初期値は単位行列だから、それで良いかも。
0832デフォルトの名無しさん (ワッチョイ d3c9-C9ZD)2017/02/13(月) 10:21:40.61ID:2bWgE/rs0
>>830
いや、メソッド呼び出しにはコストがかかるから、m11, m12…とかの値をつかって、ちゃんと計算して欲しい。
0833デフォルトの名無しさん (ワッチョイ d3c9-C9ZD)2017/02/13(月) 10:37:34.88ID:2bWgE/rs0
AffineTransform.swiftをみてるけど、

Mutates an affine transformation matrix
ってコメントと
Creates an affine transformation matrix
っていうコメントが出てくる。

Muattesってのは、行列をappendするっていう意味で使ってるんじゃないかなぁ。
0834デフォルトの名無しさん (ワッチョイ d3c9-C9ZD)2017/02/13(月) 11:00:26.80ID:2bWgE/rs0
Swift.orgにあるSwift3.1のドキュメントをみたら、Indexable, IndexableBaseプロトコルが無くなってる。Collectionプロトコルも変更ありそう。
0835デフォルトの名無しさん (ワッチョイ 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
>>835
付属型が先にあって、ジェネリクスは後から実装されたため
手遅れだった

https://github.com/apple/swift/blob/master/docs/GenericsManifesto.md
0837デフォルトの名無しさん (ワッチョイ d3c9-C9ZD)2017/02/13(月) 14:45:06.42ID:2bWgE/rs0
>>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) { ... }
}
0838デフォルトの名無しさん (ワッチョイ 52a6-yzHa)2017/02/13(月) 15:04:45.79ID:E5GyABVO0
AffineTransformのやつ一応バグレポート出した
英語できなすぎてちゃんと伝わるかはわからん
0839デフォルトの名無しさん (ワッチョイ d3c9-C9ZD)2017/02/13(月) 15:09:24.97ID:2bWgE/rs0
>>838
あんたは、偉い!
0840デフォルトの名無しさん (ワッチョイ f2c9-3OfB)2017/02/13(月) 15:19:29.48ID:HAPf6MFC0
>>837
associated 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
>>838
乙! 全世界が救われた
2回rotateさせるテストケースがあれば防げたろうに
mutaing funcはバグりやすいいい例かも
0843デフォルトの名無しさん (ワッチョイ d3c9-C9ZD)2017/02/13(月) 16:35:02.82ID:2bWgE/rs0
>>838
画像やBezierPathとか使わない人には、何のことやら判らんかもね!
0844デフォルトの名無しさん (ワッチョイ d3c9-C9ZD)2017/02/13(月) 17:09:58.36ID:2bWgE/rs0
SwiftのBug Reportサイトみてると面白いなぁ。
Report件数は徐々に増えている。ここ90日間を見ると。

単に関心を集めている事を示しているのか、bugが収束していかないのか、どっち?
0845デフォルトの名無しさん (ササクッテロリ Spf7-v7A7)2017/02/13(月) 17:13:54.68ID:M5UvUgvDp
年末年始のバケーションが終わって仕事始めただけ説
0846デフォルトの名無しさん (ワッチョイ 173c-cGUq)2017/02/13(月) 18:25:38.76ID:+QLG4LyN0
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>ですらない

今後もこれで行くのだろう
0847デフォルトの名無しさん (ワッチョイ f2c9-3OfB)2017/02/13(月) 19:29:14.18ID:HAPf6MFC0
それはGenerics ManifestoのGeneralized existentialsに書いてることじゃないの
Any<Point where .T == Float>って書けるようにするんでしょ
0848デフォルトの名無しさん (ワッチョイ 935b-3OfB)2017/02/13(月) 21:21:52.09ID:MyT3Jhih0
>>846
型消去なんて初めて知った。
VBAのVariant型みたいなクラス、構造体を作るんだって。
0849デフォルトの名無しさん (ワッチョイ b7bd-yzHa)2017/02/13(月) 22:41:44.66ID:6dmT0k850
Sequence周りって3.0 betaの頃にコロッコロ仕変してた悪夢があるな
そんな根幹I/Fを何度も変えるなと当時頭痛くなったわw
仕様破壊変更がある5.0までにまだまだ変わりそう
0850デフォルトの名無しさん (ワッチョイ 173c-cGUq)2017/02/13(月) 23:16:42.44ID:+QLG4LyN0
>>847
Move where clause to end of declaration(SE-0081)が決定済みなので
その書き方は将来的にも無くなってる

なので実装されても直の型でなくGeneric Type Aliasesを挟んでいく方向になるんじゃないかな
typealias AnyPoint<T> = Any<Point> where .T == T みたいな

例えそれでも _boxを抱えたstruct が消滅するならかなりすっきりするけど
■ このスレッドは過去ログ倉庫に格納されています