Swift part13 (412レス)
1-

1: (ワッチョイ 0f2d-WqpA) 2021/04/12(月)16:04 ID:UoC5n/T70(1/2) AAS
Swiftについて語りましょう

※前スレ
2chスレ:tech

スレ立て時は1行目に「!extend::vvvvv」 VIPQ2_EXTDAT: default:vvvvv:1000:512:: EXT was configured
383
(1): (ワッチョイ c601-VkrP) 05/24(土)10:34 ID:iDI/w+P00(1) AAS
>>382
1. オーバーロード
2. ジェネリクス(T: Numeric)
3. プロトコル(Numeric)
4. Enum

ChatGPTにでも聞けばコード含めて全部回答してくれるんじゃないか
384
(1): (ワッチョイ 460e-Lof8) 05/24(土)12:47 ID:JkI4IB9+0(2/3) AAS
自己解決しました

>>383
ここで聞いてるのであって、gptとかはだいたい周知してるのでアドバイスにもなりません
わからないならレスしないでください
385
(1): (ワッチョイ 06ea-Lof8) 05/24(土)13:26 ID:IMvqkj3f0(1) AAS
>>382
こんな感じでいいんじゃね?
知らんけど

func test<T>(num: Any) -> T {
switch (num) {
case is Int:
let ret: Int = num as! Int;
return(ret * 2 as! T);
case is Double:
let ret: Double = num as! Double;
return(ret * 2.0 as! T);
default:
return(type(of: num) as! T);
};
};
386
(1): (ワッチョイ c601-VkrP) 05/24(土)14:29 ID:aVm4nxod0(1) AAS
>>384
おまえ、GPT使っててこれなのかw
救いようがないな
387: (ワッチョイ df15-Lof8) 05/24(土)16:56 ID:ISd6qXTY0(1) AAS
>>386
さすがにGPT連呼ウゼーわ
無脳ゴミ虫はロムってろ
388: (アウアウウー Sa2f-/ppz) 05/24(土)17:56 ID:6QA0+Pxwa(1) AAS
もちつけ
動画リンク[YouTube]

389: (ワッチョイ 46c5-Lof8) 05/24(土)20:29 ID:JkI4IB9+0(3/3) AAS
>>385
マジ、ありがとう!パーフェクトです
早速つかわしてもらいます
390: (ワッチョイ 6701-wCTo) 05/24(土)21:35 ID:/vXms6Z50(1) AAS
おまえ、あのクソコードで自演バレてないと思ってたのかwww
救いようがないなw
391: (ワッチョイ e76d-Od/L) 05/24(土)22:39 ID:xQOrGKFD0(1) AAS
うわぁ自演久々にみたわ
キッツーwww
392
(1): (ワッチョイ 5f48-7h9Y) 05/25(日)03:03 ID:tp/e59CE0(1) AAS
自演とか言うてるオマエラ
コーティングはどうした?

悔しーのーwww
393: (ワッチョイ 1b6d-XbnY) 05/25(日)06:51 ID:jqh7iVcP0(1) AAS
>>392
お前のハゲ頭に塗るツルピカコーティングのこと言ってんのか?
394: (ワッチョイ bb4f-7h9Y) 05/26(月)12:10 ID:E/O4cAvn0(1) AAS
なんか荒れててワロタ
Gptが万能だと思ってる底辺って、結構いるんだな
じゃあ、このスレは不要だから削除申請しといてあげたよW

Gptに感謝W
395: (ワッチョイ 1b01-5KpO) 05/26(月)12:24 ID:mCNwP+3w0(1) AAS
こいつこれで自演バレてないと思ってるとかどういう頭してるんだよw
マジで頭悪すぎだろwww
396: (ワッチョイ 5301-G4JC) 06/10(火)10:38 ID:J5CIMo790(1) AAS
test
397
(1): (ワッチョイ fb08-G4JC) 06/10(火)10:51 ID:co9N3dhx0(1/4) AAS
func test_func(function: () -> Void) -> String {
let test: String = "引数のfunction名"
return(test)
}

func test_func1() -> Void {
return()
}

func test_func2() -> Void {
return()
}

print(test_func(function: test_func1())) //test_func1 出力
print(test_func(function: test_func2())) //test_func2 出力

--
関数の引数に関数を指定した場合、引数の関数名を取得する方法ってありますか?
398
(1): (ワッチョイ eb01-v8wM) 06/10(火)14:52 ID:CdIKdoXB0(1) AAS
>>397
#functionでできる範囲内で工夫したら?

@objc属性をつけられるならリフレクションでどうにかできると思うけど面倒くさい

あとはマクロを使って#call_test_func(function: test_func1)を
test_func(function: test_func1, name: “test_func1”)に展開するとかかな
399
(1): (ワッチョイ fb08-G4JC) 06/10(火)21:15 ID:co9N3dhx0(2/4) AAS
private test_func_name: String!
func test_func(function: () -> Void) -> String {
function()
let test: String = test_func_name
return(test)
}

func test_func1() -> Void {
test_func_name = #function
return()
}

func test_func2() -> Void {
test_func_name = #function
return()
}

print(test_func(function: test_func1())) //test_func1 出力
print(test_func(function: test_func2())) //test_func2 出力

--
>>398
> test_func(function: test_func1, name: “test_func1”)
これって、スペルミスしやすいですよね

上記の方が、まだマシな気はします

根本的に
関数の引数に関数を指定した場合、引数の関数名を取得
は不可ってことでしょうか
400
(1): (ワッチョイ 13ee-7FqK) 06/10(火)21:35 ID:kcNgEpD90(1) AAS
外部リンク:stackoverflow.com
これの回答?
401: (ワッチョイ fb08-G4JC) 06/10(火)22:03 ID:co9N3dhx0(3/4) AAS
>>400
いいえ 違います
402
(2): (ワッチョイ 0bcd-JxoL) 06/10(火)22:15 ID:povNpgQm0(1) AAS
>Swift is a statically dispatched programming language.
>This results in Swift using memory addresses as much as possible when it needs to call a function.
>The side effect is the inability to capture the called function name, since in most of the cases it will be a simple memory address.
403: (ワッチョイ fb08-G4JC) 06/10(火)22:48 ID:co9N3dhx0(4/4) AAS
>>402
ありがとう
ディクショナリー化して逃げることにします
404
(1): (ワッチョイ eb01-v8wM) 06/10(火)23:17 ID:HzGLhqs50(1) AAS
>>399
>これって、スペルミスしやすいですよね
だからマクロ・・・・・

>>402
@objc属性つければ事情が変わる
405: (ワッチョイ fbc8-jSs6) 06/11(水)01:29 ID:Y6NiPAiA0(1/3) AAS
テスト
406
(1): (ワッチョイ fb6a-G4JC) 06/11(水)08:54 ID:Y6NiPAiA0(2/3) AAS
>>404
マクロにしても...

すいませんが、サンプルコーディングみせてもらえませんか
お願いします
407
(1): (ワッチョイ fbe8-G4JC) 06/11(水)23:22 ID:Y6NiPAiA0(3/3) AAS
関数の引数に関数を指定した場合、引数の関数名取得して適宜分岐処理したかっただけでしたが、実質無理っぽいですね
いろいろと検索してたらObjectIdentifierなるものがあって、試したところ
引数の関数名は取得できないまでも、引数の関数の識別ができたので、解決しました
408
(1): (ワッチョイ 0101-v8wM) 06/11(水)23:36 ID:xQ0zj3960(1/2) AAS
>>406
主なところだけ書くけど
let firstArg = node.arguments.first!
let expr = firstArg.expression.trimmedDescription
return "test_func(function: \(expr), name: \"\(expr)\")"
みたいなので
#call_test_func(function: test_func1)みたいな呼び出しを
test_func(function: test_func1, name: "test_func1”)に展開できる
409
(1): (ワッチョイ 0101-v8wM) 06/11(水)23:44 ID:xQ0zj3960(2/2) AAS
>>407
高階関数で受け取った関数を識別して分岐処理を書くのは一般的には筋が悪い実装だよ
理解した上であえてやってるならいいけどそうじゃないなら再考を勧める
410
(1): (ワッチョイ fbe8-G4JC) 06/12(木)00:07 ID:gPSDSI/z0(1) AAS
>>408
test_func(function: test_func1, name: "test_func1”)

test_func1 と "test_func1" として実装するのが気に入らないのです

>>409
そもそも引数に関数ってのが、好ましくないのは承知してます
ただ、どうしても引数とした関数として処理した方が、プログラム上、高メリットとなるので実装してます

余談ながら@objc化して引数の関数名を取得は可能でしたが、Selectorとかなんやらでなんか面倒で...
ObjectIdentifier使った方が、意外にスマートな分岐処理が実装できたので、ObjectIdentifierで処理します
411: (ワッチョイ 0101-v8wM) 06/12(木)01:05 ID:huei3sVu0(1) AAS
>>410
>そもそも引数に関数ってのが、好ましくないのは承知してます
関数を受け渡しするのは別に悪くない
使う状況によってはむしろ好ましいことも多い
悪いのは関数を受け渡しする形にしているにもかかわらず
受け取った側でどの関数が渡されたかを識別して分岐しようとすること

@objcのは最初に書いてあるように一番面倒なやり方だからね
リフレクションを使いまくるような用途じゃなければ割に合わない
412: (ワッチョイ c170-PdR5) 06/12(木)12:08 ID:1TmeXXfD0(1) AAS
ありえん設計だな
何か根本的に勘違いしてるとしか考えられん
1-
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ

ぬこの手 ぬこTOP 1.065s*