探検
Swift part13
1デフォルトの名無しさん (ワッチョイ 0f2d-WqpA)
2021/04/12(月) 16:04:28.17ID:UoC5n/T70Swiftについて語りましょう
※前スレ
https://mevius.5ch.net/test/read.cgi/tech/1540818496/
スレ立て時は1行目に「!extend::vvvvv」
VIPQ2_EXTDAT: default:vvvvv:1000:512:: EXT was configured
397デフォルトの名無しさん (ワッチョイ fb08-G4JC)
2025/06/10(火) 10:51:04.60ID:co9N3dhx0 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 出力
--
関数の引数に関数を指定した場合、引数の関数名を取得する方法ってありますか?
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デフォルトの名無しさん (ワッチョイ eb01-v8wM)
2025/06/10(火) 14:52:10.11ID:CdIKdoXB0 >>397
#functionでできる範囲内で工夫したら?
@objc属性をつけられるならリフレクションでどうにかできると思うけど面倒くさい
あとはマクロを使って#call_test_func(function: test_func1)を
test_func(function: test_func1, name: “test_func1”)に展開するとかかな
#functionでできる範囲内で工夫したら?
@objc属性をつけられるならリフレクションでどうにかできると思うけど面倒くさい
あとはマクロを使って#call_test_func(function: test_func1)を
test_func(function: test_func1, name: “test_func1”)に展開するとかかな
399デフォルトの名無しさん (ワッチョイ fb08-G4JC)
2025/06/10(火) 21:15:44.74ID:co9N3dhx0 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”)
これって、スペルミスしやすいですよね
上記の方が、まだマシな気はします
根本的に
関数の引数に関数を指定した場合、引数の関数名を取得
は不可ってことでしょうか
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デフォルトの名無しさん (ワッチョイ 13ee-7FqK)
2025/06/10(火) 21:35:35.99ID:kcNgEpD90401デフォルトの名無しさん (ワッチョイ fb08-G4JC)
2025/06/10(火) 22:03:32.75ID:co9N3dhx0 >>400
いいえ 違います
いいえ 違います
402デフォルトの名無しさん (ワッチョイ 0bcd-JxoL)
2025/06/10(火) 22:15:58.52ID:povNpgQm0 >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.
>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)
2025/06/10(火) 22:48:21.96ID:co9N3dhx0404デフォルトの名無しさん (ワッチョイ eb01-v8wM)
2025/06/10(火) 23:17:17.93ID:HzGLhqs50405デフォルトの名無しさん (ワッチョイ fbc8-jSs6)
2025/06/11(水) 01:29:20.37ID:Y6NiPAiA0 テスト
406デフォルトの名無しさん (ワッチョイ fb6a-G4JC)
2025/06/11(水) 08:54:28.08ID:Y6NiPAiA0407デフォルトの名無しさん (ワッチョイ fbe8-G4JC)
2025/06/11(水) 23:22:15.31ID:Y6NiPAiA0 関数の引数に関数を指定した場合、引数の関数名取得して適宜分岐処理したかっただけでしたが、実質無理っぽいですね
いろいろと検索してたらObjectIdentifierなるものがあって、試したところ
引数の関数名は取得できないまでも、引数の関数の識別ができたので、解決しました
いろいろと検索してたらObjectIdentifierなるものがあって、試したところ
引数の関数名は取得できないまでも、引数の関数の識別ができたので、解決しました
408デフォルトの名無しさん (ワッチョイ 0101-v8wM)
2025/06/11(水) 23:36:45.91ID:xQ0zj3960 >>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”)に展開できる
主なところだけ書くけど
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デフォルトの名無しさん (ワッチョイ 0101-v8wM)
2025/06/11(水) 23:44:57.69ID:xQ0zj3960410デフォルトの名無しさん (ワッチョイ fbe8-G4JC)
2025/06/12(木) 00:07:03.79ID:gPSDSI/z0 >>408
test_func(function: test_func1, name: "test_func1”)
の
test_func1 と "test_func1" として実装するのが気に入らないのです
>>409
そもそも引数に関数ってのが、好ましくないのは承知してます
ただ、どうしても引数とした関数として処理した方が、プログラム上、高メリットとなるので実装してます
余談ながら@objc化して引数の関数名を取得は可能でしたが、Selectorとかなんやらでなんか面倒で...
ObjectIdentifier使った方が、意外にスマートな分岐処理が実装できたので、ObjectIdentifierで処理します
test_func(function: test_func1, name: "test_func1”)
の
test_func1 と "test_func1" として実装するのが気に入らないのです
>>409
そもそも引数に関数ってのが、好ましくないのは承知してます
ただ、どうしても引数とした関数として処理した方が、プログラム上、高メリットとなるので実装してます
余談ながら@objc化して引数の関数名を取得は可能でしたが、Selectorとかなんやらでなんか面倒で...
ObjectIdentifier使った方が、意外にスマートな分岐処理が実装できたので、ObjectIdentifierで処理します
411デフォルトの名無しさん (ワッチョイ 0101-v8wM)
2025/06/12(木) 01:05:32.00ID:huei3sVu0 >>410
>そもそも引数に関数ってのが、好ましくないのは承知してます
関数を受け渡しするのは別に悪くない
使う状況によってはむしろ好ましいことも多い
悪いのは関数を受け渡しする形にしているにもかかわらず
受け取った側でどの関数が渡されたかを識別して分岐しようとすること
@objcのは最初に書いてあるように一番面倒なやり方だからね
リフレクションを使いまくるような用途じゃなければ割に合わない
>そもそも引数に関数ってのが、好ましくないのは承知してます
関数を受け渡しするのは別に悪くない
使う状況によってはむしろ好ましいことも多い
悪いのは関数を受け渡しする形にしているにもかかわらず
受け取った側でどの関数が渡されたかを識別して分岐しようとすること
@objcのは最初に書いてあるように一番面倒なやり方だからね
リフレクションを使いまくるような用途じゃなければ割に合わない
412デフォルトの名無しさん (ワッチョイ c170-PdR5)
2025/06/12(木) 12:08:03.22ID:1TmeXXfD0 ありえん設計だな
何か根本的に勘違いしてるとしか考えられん
何か根本的に勘違いしてるとしか考えられん
413デフォルトの名無しさん (ワッチョイ 199c-nbgv)
2025/10/27(月) 13:46:24.84ID:94yXD1ih0 Apple発のプログラミング言語「Swift」でAndroidアプリの開発が可能に
https://gigazine.net/news/20251027-swift-sdk-for-android/
https://gigazine.net/news/20251027-swift-sdk-for-android/
414デフォルトの名無しさん (ワッチョイ 8101-l9bj)
2025/10/29(水) 08:44:36.17ID:/33m2d4b0 なんかもう言語とかフレームワークとかなんでも良くなってきてる感
どうせAIが書くし
どうせAIが書くし
レスを投稿する
ニュース
- 【速報】政府、与党がNISA未成年解禁を検討 [蚤の市★]
- 【茶葉高騰】「綾鷹」値上げで650mL220円に 26年3月から [1ゲットロボ★]
- 【女子ゴルフ】都玲華(21)30歳年上の既婚者コーチとの交際関係とコーチ契約解消「昨年からお付き合いしてました。」 [阿弥陀ヶ峰★]
- 【おこめ】ベトナムから密輸のコメを「国産」と偽り販売容疑、ベトナム人ら2人追送検…300トン売って1億3000万円稼いだか 大阪 ★2 [ぐれ★]
- 定数削減「小選挙区25・比例20」軸に検討 自民維新の両党首合意 [ぐれ★]
- 日テレ、国分太一の「答え合わせ」を却下 「答え合わせをするまでもない」「心当たりがあると述べられている」★ 2 [muffin★]
- とらせん IP
- 競輪実況★1616
- 【DAZN】フォーミュラGP【F1 2 3 SF P】Lap1816
- 【フジテレビ】2025 FORMULA 1【NEXT】Lap609
- 巨専】
- わしせん 楽天モバイル 最強パーク宮城
- Fate/GOスレ
- 【悲報】たぬかな、イベント辞退「身の安全を確保できない」 [329329848]
- 愛国者「中国軍は実戦経験がない軍隊だ。戦争になれば、日本が一方的に叩いて終わりだ」 [834922174]
- おさかなさんあつまれえ
- 京アニ『ℂ 𝕀 𝕋 𝕐』で好きなエピソードは? [546716239]
- 【悲報】とうふさん、死亡🏡
