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
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 が消滅するならかなりすっきりするけど
0851デフォルトの名無しさん (ワッチョイ 9293-S0So)
2017/02/13(月) 23:30:02.41ID:yy8XR/E60乙々、
アフィン変換使わないから詳細はりかいできなかったけど
放置せずキチンとレポートするのは素晴らしい
0852デフォルトの名無しさん (ワッチョイ 9b33-C9ZD)
2017/02/14(火) 08:13:19.63ID:G4PVI11K0Swift最高!!!
0853デフォルトの名無しさん (ワッチョイ d3c9-C9ZD)
2017/02/14(火) 08:39:20.94ID:oIIhH5jL0独自でIteratorを実装する人にしか影響ないんちゃう?
UIKit使ってiOSアプリ作る人の中で、独自のデータデータ構造を定義、実装する人なんて少ないと思う。
0854デフォルトの名無しさん (スプッッ Sd72-NOvL)
2017/02/14(火) 09:07:42.45ID:15O9OsV1d次世代言語のなかでは最も簡単で誰でも使えるとても良い言語だと思う
0855デフォルトの名無しさん (スップ Sd72-ogAn)
2017/02/14(火) 09:10:39.08ID:o1Hy+Q1/d0856デフォルトの名無しさん (ワッチョイ b7bd-yzHa)
2017/02/14(火) 09:12:13.53ID:j+ud4G/F0macOS, iOS専用言語じゃないという建前を現実にするためその辺の層を作ってると
メジャーバージョンアップの根幹I/Fのライブラリ仕様変更はいつも笑えるほどにアレなの...
StringやRaw Memoryも同じく未だに仕変が多いような
確かにそれで困ってるアホはSwiftに夢見る少数だから笑いながら扱っている:)
0857デフォルトの名無しさん (ササクッテロラ Spf7-CouY)
2017/02/14(火) 09:14:30.69ID:EC+U4L2lp0858デフォルトの名無しさん (アウアウエー Sa4a-CouY)
2017/02/14(火) 09:14:48.51ID:nwUJp3gZa0859デフォルトの名無しさん (ワッチョイ d3c9-C9ZD)
2017/02/14(火) 09:47:42.81ID:oIIhH5jL0だれでも簡単に扱えない、C++みたいな運命を辿りかねない。
Standard Libraryの充実って所に力点を置き過ぎるのは、初心者に
言語使用デカすぎ!って印象を抱かせてしまう。
C++が2011年まで放置されたような事になっちゃうよ。
0860デフォルトの名無しさん (スプッッ Sd72-NOvL)
2017/02/14(火) 10:03:21.46ID:15O9OsV1dそこを批判するのはどうかとおもうね
いずれにしても必要なこと
0861デフォルトの名無しさん (ワッチョイ 173c-cGUq)
2017/02/14(火) 10:58:05.18ID:2PqESwAW0遅れはしたが別に放置はされてない
0862デフォルトの名無しさん (JP 0H72-cGUq)
2017/02/14(火) 12:09:10.49ID:OJnhURbNH0863デフォルトの名無しさん (ワッチョイ f23c-DoU+)
2017/02/14(火) 14:11:53.20ID:gfvqdCIF0>関数内でのスタティック変数の宣言
スタティック変数を関数内で宣言したいってどういうケース?
0864デフォルトの名無しさん (ワッチョイ d3c9-C9ZD)
2017/02/14(火) 14:14:19.93ID:oIIhH5jL0関数が何回呼ばれたかをカウントするために、static varしたいんじゃないか?
0865デフォルトの名無しさん (ワッチョイ d3c9-C9ZD)
2017/02/14(火) 14:23:42.66ID:oIIhH5jL0let f = { cnt += 1; print("cnt = ¥(cnt)") }
f()
f()
f()
closure使えば、何回呼ばれたかは、カント可能なんだが、これじゃダメなのか?
0866デフォルトの名無しさん (ワッチョイ f2c9-3OfB)
2017/02/14(火) 14:23:49.58ID:LIVGV7l100867デフォルトの名無しさん (ササクッテロラ Spf7-CouY)
2017/02/14(火) 14:36:43.72ID:EC+U4L2lpstatic var count: Int
って宣言するだけで済めば便利だなと思っただけだよ
0868デフォルトの名無しさん (ササクッテロリ Spf7-v7A7)
2017/02/14(火) 15:12:32.02ID:W2b/azRYp出来ることとスマートであることは別だよね
0869デフォルトの名無しさん (ワッチョイ f2c9-3OfB)
2017/02/14(火) 16:00:12.19ID:LIVGV7l100870デフォルトの名無しさん (スフッ Sd52-S0So)
2017/02/14(火) 18:43:58.17ID:qIbz53rXdときどきでいいからc++17の事も思い出してあげて
0871デフォルトの名無しさん (ワッチョイ f23c-DoU+)
2017/02/14(火) 19:45:15.25ID:gfvqdCIF0カウント処理をラップする関数を書いてそれにカウントしたい関数を渡したいところ
でもあらゆる型の関数(クロージャ)でも受け取って引数付きで実行するのってSwiftでできるんだっけ?
0872デフォルトの名無しさん (ワッチョイ f2c9-3OfB)
2017/02/14(火) 22:04:56.83ID:LIVGV7l10https://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リセットするときどうすんの?
あまりに用途が限られるのでは…
0875デフォルトの名無しさん (アウアウエー Sa4a-CouY)
2017/02/14(火) 23:03:44.89ID:PDBDanqwacount = 0
でダメ?
Obj-Cで使う時と同じ
0876デフォルトの名無しさん (ワッチョイ f23c-DoU+)
2017/02/14(火) 23:20:04.44ID:gfvqdCIF0�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これは辛い
0878デフォルトの名無しさん (ブーイモ MM52-mpSg)
2017/02/14(火) 23:26:04.59ID:y+v+ZN8qMそれを誰が指示すんの?
内部のstatic変数を初期化する引数を追加して使用者に指定してもらうの?
0879デフォルトの名無しさん (アウアウエー Sa4a-C9ZD)
2017/02/14(火) 23:34:45.01ID:PDBDanqwaそれは引数で渡すのか他の変数の状態に依存するのか関数を書く人次第でしょ
C言語のstatic変数使ったことないの? ググってみれば?
0880デフォルトの名無しさん (ワッチョイ 9b33-C9ZD)
2017/02/15(水) 00:01:10.23ID:RQyBuwlX00881デフォルトの名無しさん (ワッチョイ f2c9-3OfB)
2017/02/15(水) 00:05:03.84ID:98yhGEhP0ラップされた側でさらにタプルに包んで渡さないといけないのがつらいけどこれどうにかできんかな
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:rlmICMnW0http://swiftlang.ng.bluemix.net/#/repl/58a32121691eea40bd985ea3
0883デフォルトの名無しさん (ワッチョイ f2c9-3OfB)
2017/02/15(水) 00:38:51.58ID:98yhGEhP0なるほど、そうなるのか
■ このスレッドは過去ログ倉庫に格納されています