トップページ⇒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
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 が消滅するならかなりすっきりするけど
0851デフォルトの名無しさん (ワッチョイ 9293-S0So)2017/02/13(月) 23:30:02.41ID:yy8XR/E60
>>838
乙々、
アフィン変換使わないから詳細はりかいできなかったけど
放置せずキチンとレポートするのは素晴らしい
0852デフォルトの名無しさん (ワッチョイ 9b33-C9ZD)2017/02/14(火) 08:13:19.63ID:G4PVI11K0
さすがSwift!!!
Swift最高!!!
0853デフォルトの名無しさん (ワッチョイ d3c9-C9ZD)2017/02/14(火) 08:39:20.94ID:oIIhH5jL0
>>849
独自でIteratorを実装する人にしか影響ないんちゃう?
UIKit使ってiOSアプリ作る人の中で、独自のデータデータ構造を定義、実装する人なんて少ないと思う。
0854デフォルトの名無しさん (スプッッ Sd72-NOvL)2017/02/14(火) 09:07:42.45ID:15O9OsV1d
>>852
次世代言語のなかでは最も簡単で誰でも使えるとても良い言語だと思う
0855デフォルトの名無しさん (スップ Sd72-ogAn)2017/02/14(火) 09:10:39.08ID:o1Hy+Q1/d
なんたってモダンだからなw
0856デフォルトの名無しさん (ワッチョイ b7bd-yzHa)2017/02/14(火) 09:12:13.53ID:j+ud4G/F0
上層レイヤーを扱う分には影響ないと思うんだけど、C <-> Swiftのラッパー層あたりは結構困る
macOS, iOS専用言語じゃないという建前を現実にするためその辺の層を作ってると
メジャーバージョンアップの根幹I/Fのライブラリ仕様変更はいつも笑えるほどにアレなの...
StringやRaw Memoryも同じく未だに仕変が多いような

確かにそれで困ってるアホはSwiftに夢見る少数だから笑いながら扱っている:)
0857デフォルトの名無しさん (ササクッテロラ Spf7-CouY)2017/02/14(火) 09:14:30.69ID:EC+U4L2lp
関数内でのスタティック変数の宣言と、VBのwith〜end with的な構文があると嬉しいんだけど
0858デフォルトの名無しさん (アウアウエー Sa4a-CouY)2017/02/14(火) 09:14:48.51ID:nwUJp3gZa
関数内でのスタティック変数の宣言と、VBのwith〜end with的な構文があると嬉しいんだけど
0859デフォルトの名無しさん (ワッチョイ d3c9-C9ZD)2017/02/14(火) 09:47:42.81ID:oIIhH5jL0
>>854
だれでも簡単に扱えない、C++みたいな運命を辿りかねない。
Standard Libraryの充実って所に力点を置き過ぎるのは、初心者に
言語使用デカすぎ!って印象を抱かせてしまう。

C++が2011年まで放置されたような事になっちゃうよ。
0860デフォルトの名無しさん (スプッッ Sd72-NOvL)2017/02/14(火) 10:03:21.46ID:15O9OsV1d
>>859
そこを批判するのはどうかとおもうね
いずれにしても必要なこと
0861デフォルトの名無しさん (ワッチョイ 173c-cGUq)2017/02/14(火) 10:58:05.18ID:2PqESwAW0
>>859
遅れはしたが別に放置はされてない
0862デフォルトの名無しさん (JP 0H72-cGUq)2017/02/14(火) 12:09:10.49ID:OJnhURbNH
C++11で安定したのでは?
0863デフォルトの名無しさん (ワッチョイ f23c-DoU+)2017/02/14(火) 14:11:53.20ID:gfvqdCIF0
>>858
>関数内でのスタティック変数の宣言

スタティック変数を関数内で宣言したいってどういうケース?
0864デフォルトの名無しさん (ワッチョイ d3c9-C9ZD)2017/02/14(火) 14:14:19.93ID:oIIhH5jL0
>>863
関数が何回呼ばれたかをカウントするために、static varしたいんじゃないか?
0865デフォルトの名無しさん (ワッチョイ d3c9-C9ZD)2017/02/14(火) 14:23:42.66ID:oIIhH5jL0
var cnt = 0
let f = { cnt += 1; print("cnt = ¥(cnt)") }
f()
f()
f()
closure使えば、何回呼ばれたかは、カント可能なんだが、これじゃダメなのか?
0866デフォルトの名無しさん (ワッチョイ f2c9-3OfB)2017/02/14(火) 14:23:49.58ID:LIVGV7l10
クロージャでいいんじゃない
0867デフォルトの名無しさん (ササクッテロラ Spf7-CouY)2017/02/14(火) 14:36:43.72ID:EC+U4L2lp
前回の呼ばれた時の値を保持しときたいならクロージャを用意するまでもなく別にメンバ変数でもいいんだけど、関数内で
static var count: Int
って宣言するだけで済めば便利だなと思っただけだよ
0868デフォルトの名無しさん (ササクッテロリ Spf7-v7A7)2017/02/14(火) 15:12:32.02ID:W2b/azRYp
関数内staticの必要性は分からんけど>>865はダサいと思った
出来ることとスマートであることは別だよね
0869デフォルトの名無しさん (ワッチョイ f2c9-3OfB)2017/02/14(火) 16:00:12.19ID:LIVGV7l10
お前がそう思うんなら(ry
0870デフォルトの名無しさん (スフッ Sd52-S0So)2017/02/14(火) 18:43:58.17ID:qIbz53rXd
>>862
ときどきでいいからc++17の事も思い出してあげて
0871デフォルトの名無しさん (ワッチョイ f23c-DoU+)2017/02/14(火) 19:45:15.25ID:gfvqdCIF0
そういう用途かー
カウント処理をラップする関数を書いてそれにカウントしたい関数を渡したいところ
でもあらゆる型の関数(クロージャ)でも受け取って引数付きで実行するのってSwiftでできるんだっけ?
0872デフォルトの名無しさん (ワッチョイ f2c9-3OfB)2017/02/14(火) 22:04:56.83ID:LIVGV7l10
>>871
https://gist.github.com/JadenGeller/f8ad2574590f956fee92
古いから何箇所か手直しいるけどこんな感じで出来なくはないけど
0873デフォルトの名無しさん (ワッチョイ 173c-cGUq)2017/02/14(火) 22:31:11.88ID:2PqESwAW0
任意の多引数には言語仕様的に対応出来ないから
これと同じようなやり方で足りそうな所まで並べるしかない
https://github.com/thoughtbot/Curry/blob/master/Source/Curry.swift
0874デフォルトの名無しさん (ブーイモ MM52-mpSg)2017/02/14(火) 22:54:22.13ID:+bEgvAQFM
>>867
リセットするときどうすんの?
あまりに用途が限られるのでは…
0875デフォルトの名無しさん (アウアウエー Sa4a-CouY)2017/02/14(火) 23:03:44.89ID:PDBDanqwa
ん? リセット? 普通に関数内で
count = 0
でダメ?

Obj-Cで使う時と同じ
0876デフォルトの名無しさん (ワッチョイ f23c-DoU+)2017/02/14(火) 23:20:04.44ID:gfvqdCIF0
>>872
�d
型を渡して、doAfterでラップして、callで呼ぶっていう3ステップはちときついね
前2つはカウント専用にすれば1ステップになるけどcallじゃなくカウント機能のついた関数を返してくれてそれを実行したいところ
あと引数の数の違いはタプルになるから問題なさそうだけど高階関数にも使えるんだろうか?

とりあえずSwift3で動くバージョン上げといた
https://gist.github.com/anonymous/ff4440ac74c87d451502984d3125b095
0877デフォルトの名無しさん (ワッチョイ f23c-DoU+)2017/02/14(火) 23:20:32.69ID:gfvqdCIF0
>>873
これは辛い
0878デフォルトの名無しさん (ブーイモ MM52-mpSg)2017/02/14(火) 23:26:04.59ID:y+v+ZN8qM
>>875
それを誰が指示すんの?
内部のstatic変数を初期化する引数を追加して使用者に指定してもらうの?
0879デフォルトの名無しさん (アウアウエー Sa4a-C9ZD)2017/02/14(火) 23:34:45.01ID:PDBDanqwa
>>878
それは引数で渡すのか他の変数の状態に依存するのか関数を書く人次第でしょ
C言語のstatic変数使ったことないの? ググってみれば?
0880デフォルトの名無しさん (ワッチョイ 9b33-C9ZD)2017/02/15(水) 00:01:10.23ID:RQyBuwlX0
Swift界隈ではC言語を知らない人もいるのだろう
0881デフォルトの名無しさん (ワッチョイ f2c9-3OfB)2017/02/15(水) 00:05:03.84ID:98yhGEhP0
>>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
0882デフォルトの名無しさん (ワッチョイ 173c-cGUq)2017/02/15(水) 00:25:36.90ID:rlmICMnW0
>>881
http://swiftlang.ng.bluemix.net/#/repl/58a32121691eea40bd985ea3
0883デフォルトの名無しさん (ワッチョイ f2c9-3OfB)2017/02/15(水) 00:38:51.58ID:98yhGEhP0
>>882
なるほど、そうなるのか
■ このスレッドは過去ログ倉庫に格納されています