Guild icon
swift-developers-japan
開発環境, ライブラリ / swift-playgrounds
iPadのSwift PlaygroundsとXcodeのPlaygrounds
Avatar
@mono このドキュメント自体の存在が、です。
6:11 AM
2016-09-13 New document that describes the formats used for creating books for Swift Playgrounds
Avatar
あ、なるほど。
6:11 AM
iPadのPlaygroundアプリとXcodeのPlaygroundが混ざりそう 🤔 (edited)
6:12 AM
@mono それ考えたんですけど、共通部分もあるから難しいんですよねぇ・・・。
🤔 1
6:13 AM
iPad の Swift Playgrounds は基本的に Xcode のと同じように動くんですが、 Playgournd Book もサポートしてるという感じなので。
6:13 AM
Xcode でも Playground Book をサポートしてくれれば同じものとして解決なんですが・・・。
😗 2
Avatar
おは
9:30 AM
このドキュメントいつからあったの・・・・・?
9:31 AM
そもそもfeedを指定できるようになったのって1.2くらいじゃなかったっけ?
9:31 AM
XcodeでPlayground Bookをサポートするか,開発環境あるいはテスト環境を用意しろってバグレポはきったし,WWDCでもかなり文句言ったのだが
Avatar
おう,昨日かw
9:33 AM
@koher ありがとうございます
🙂 1
Avatar
こんなドキュメントあるのまったく知りませんでしたねぇ・・・。ドキュメント自体は 1 年以上前からあったとは。
Avatar
https://developer.apple.com/library/content/navigation/ を週一くらいでチェックするのオススメです( ´・‿・`) あと、これContent UpdateじゃなくてMinor Changeなんですね🤔
Avatar
おお、.playgroundbookの配布と購読をサポートするようになるってことでしょうか。今ちょうど自作してたので嬉しいです
12:37 PM
Swift Playgrounds特有の機能を使おうとするとデバッグが辛いので、開発環境も欲しいですね…
Avatar
2.0リリースにあわせてドキュメントが更新され、ついにPlaygroundBluetooth Frameworkの仕様が公式ドキュメントになりました https://developer.apple.com/library/content/documentation/Xcode/Conceptual/swift_playgrounds_doc_format/AboutthePlaygroundBluetoothFramework.html
Avatar
ためしにPlaygroundBluetoothのサンプルを購読できるようにしてみました。.playgroungをzipしたものでもいけるんですねー https://bricklife.github.io/DummyPlaygroundBluetooth/
👍 2
Avatar
Xcodeのplaygroundでpageを作ると途端に補完が効かなくなるんですけど、僕だけですか?
Avatar
norio_nomura 5/3/2018 10:37 AM
Swift Playgrounds Author Template for Xcode 9.3 https://download.developer.apple.com/Developer_Tools/Swift_Playgrounds_Author_Template_for_Xcode_9.3/Swift_Playgrounds_Author_Template_for_Xcode_9.3.xip This package includes a sample Xcode project and related tools to aid in creating, debugging, and producing a playground book document compatible with Swift Playgrounds for iPad, including support for all of the features available in Swift Playgrounds 2.1. This package requires a Mac, and supports Xcode 9.3. It may not be compatible with later releases of Xcode. (edited)
Avatar
WWDC2018で,このAuthor Templateの使い方が説明されてました.
10:35 AM
ようやっと,意味がわかった気がします.
Avatar
@swift-4.1.3 import Foundation let calendar = Calendar.init(identifier: Calendar.Identifier.gregorian) DispatchQueue.concurrentPerform(iterations: 1000) { i in let timeZone = TimeZone(secondsFromGMT: 0)! let components: DateComponents = calendar.dateComponents(in: timeZone, from: Date()) }
Avatar
exit status: 134 with stderr:<stdin>:7:9: warning: immutable value 'components' was never used; consider replacing with '_' or removing it let components: DateComponents = calendar.dateComponents(in: timeZone, from: Date()) ^~~~~~~~~~ _ pure virtual method called pure virtual method called terminate called without an active exception terminate called recursively pure virtual method called terminate called recursively
Avatar
(#swiftbot-sandbox と間違えました😨 )
Avatar
これでデバッグが少しは楽になる…? まだ試してませんが https://twitter.com/houhei/status/1062135127814234117?s=21
Playgrounds 2.2 の設定に「オーサリング・デバッグ・モード」があるけど、これは以前のバージョンからあったのだろうか? どの程度詳細なエラーを表示してくれるのか期待しつつオンにして試してみま...
Avatar
iPadのplaygroundで勉強してる人を見る機会があったんだけど、やっぱり最初はインデントとかめちゃめちゃになるからgolandでonsaveの時にgofmt走るみたいな感じでコード整形する機能あってもいいなぁと思った。 質問される側もコード整っていた方が読みやすいだろうし
Avatar
@swift-4.2.4 @swift-5.0.3 @swift-main print(String(UInt64.max) == String(Int64.max))
Avatar
false
Avatar
swiftNightly BOT 1/17/2019 10:23 AM
false
Avatar
false
Avatar
おや
Avatar
Kishikawa Katsumi 1/17/2019 10:28 AM
IntとUIntのMaxは違う値じゃないです?
Avatar
Int64.max+1をUInt64にデコードできないバグを踏んでしまったのですが、PlaygroundLookableがIntに丸めて表示するせいで色々勘違いしてしまいました。
Avatar
Kishikawa Katsumi 1/17/2019 10:31 AM
PlaygroundLookableはIntにしてしまうんですか。
Avatar
そうなんですよ〜〜〜
10:31 AM
だまされました
10:32 AM
@swift-4.2.4 @swift-5.0.3 @swift-main let data = """ {"data": 9223372036854775808} """ struct Foo: Codable { var data: UInt64 } import Foundation print(try! JSONDecoder().decode(Foo.self, from: data.data(using: .utf8)!)) (edited)
Avatar
swiftNightly BOT 1/17/2019 10:32 AM
Foo(data: 9223372036854775808) (edited)
Avatar
Foo(data: 9223372036854775807) (edited)
Avatar
Foo(data: 9223372036854775808) (edited)
Avatar
おやおやおや
Avatar
ウケる
10:34 AM
4.2.1だけ違うw
Avatar
しまった、ここは #swiftbot-sandbox ではなかった 🚓
Avatar
ライブラリに Playground をつけたら手軽に試せて良いと思うのですが,ライブラリの Sources ディレクトリと並列にトップにおいて,Playground はそれをソースファイルとして参照するってことはできないですね…🙄(やろうとすると Xcode が crash する) (edited)
Avatar
RxSwiftがPlaygroundにframework追加しているので真似をすると良さそう
Avatar
workspace に一緒に入れる方法ですかね?
Avatar
ですです
10:11 AM
Reactive Programming in Swift. Contribute to ReactiveX/RxSwift development by creating an account on GitHub.
Avatar
workspace でビルドするとその中で playground から実行できるって奴ですよね.
10:13 AM
Playground 単体で外部ソースディレクトリが参照できればシンプルなのにと思いまして🙄
Avatar
wrokspaceの中にPlaygroundがあって、Worspaceのビルドターゲットをビルドしていれば
Avatar
symbolic link もダメでしたw
Avatar
うーん
Avatar
ビルド済みのフレームワークをコミットするとか?
Avatar
playgroundを右クリックしてPackageを開くってやると
10:15 AM
ディレクトリが開けるんですよね、その中にxcworkspaceがあるので
10:15 AM
実はどうにかする方法はあるかもです
10:17 AM
./Playground.playground/Resources/ この辺にFrameworkのパスを置ければなんとかならないかな
Avatar
このパッケージの中の Sources を symbolic link にしてみたんですが,それはダメでした.
10:18 AM
とりあえずもう少しやってみますw
Avatar
Franeworksとかじゃね
Avatar
Frameworks作れるのか
Avatar
いや、しらん、勘
Avatar
@swiftbot func f(_ a: Any) { print(type(of: a)) } func f(_ a: Float) { print(type(of: a)) } f(1)
🛠 1
Avatar
Author icon
tarunon
func f(_ a: Any) { print(type(of: a)) } func f(_ a: Float) { print(type(of: a)) } f(1)
Version:
swift-5.1-RELEASE
Output:
Int
Error:
Avatar
おおーw
Avatar
ここは #swiftbot-sandbox じゃなかった定期だ 😓
Avatar
アッ
Avatar
Kishikawa Katsumi 10/17/2019 4:05 PM
ホンマや
4:06 PM
ここはPlaygroundそのものの問題を議論する場、か。
Avatar
norio_nomura 2/11/2020 9:45 PM
‎MacおよびiPad版のSwift Playgroundsは、楽しく遊びながらプログラミングを学べる画期的なアプリケーションです。“コードを学ぼう”レッスンでは、説明に従ってキャラクターを動かして、さまざまなステージをクリアしながら、コードの基礎を身につけます。さらに“チャレンジ”では、さまざまな課題に挑戦するユニークなコーディング体験が得られます。 Swift Playgroundsはプログラミングの知識がなくても遊べるので、12歳から112歳まで、これからプログラミングを始めようという方にピッタリです。Appleが開発し、多くの人気アプリケ...
Avatar
Mac版が出たんですね!iPad版は入力しづらかったのでいいかもしれませんね。
4:30 AM
iPad版、僕は入力に難ありだと思ってるんですが、そんなことないですか?
Avatar
yutailang0119 2/12/2020 4:33 AM
もう少しXcodeっぽくなってほしいと思いつつ、諦めて使ってたら慣れてきてました
Avatar
わかってる人が書く分には大丈夫にしても、まったくの初心者に使ってもらうと、中途半端にインデントとか {} の補完とかするのがわかりづらそうだった記憶があります。自分で入力してないから、 } を消しちゃったりインデント破壊しちゃったときに、直し方がわからないみたいな。
Avatar
yutailang0119 2/12/2020 4:57 AM
それは実感あります… Swift Playgrounds、コード整形ないと思ってたけど、複数行にはかからないが、単行にはctl + i効くんですね
Avatar
norio_nomura 4/1/2020 3:20 AM
Swift PlaygroundsはSourceKitをsandbox下で動かしてる様に見える…
3:22 AM
あー、たくさんentitlementsがついてた。 The code signature contains entitlements.  iCloud entitlements: iCloud store: “BVNY5T73P8.com.apple.Playgrounds”. iCloud containers: “iCloud.com.apple.Playgrounds”. Sandbox entitlements: User-selected files, read/write access: YES. Allow outgoing network connections: YES. Allow incoming network connections: YES. Allow camera access: YES. Application identifier: “BVNY5T73P8.com.apple.PlaygroundsMac”. com.apple.developer.ClassKit-environment: “production”. com.apple.developer.associated-domains: “applinks:developer.apple.com”. com.apple.developer.icloud-services: “CloudDocuments”. com.apple.developer.associated-application-identifier: “BVNY5T73P8.com.apple.Playgrounds”. com.apple.developer.icloud-container-identifiers: “iCloud.com.apple.Playgrounds”. Temporary exception entitlements: files.home-relative-path.read-write: “/Documents/Playgrounds/”. iokit-user-client-class: “AppleMobileFileIntegrityUserClient”. shared-preference.read-only: “com.apple.AssetCacheLocator”. mach-lookup.global-name: “com.apple.rtcreportingd”, “com.apple.AssetCacheLocatorService”, “com.apple.security.syspolicy.exec”. Apple private exception entitlements: tcc.policy-override: YES. amfi.can-load-cdhash: YES. MobileContainerManager.wipeContainer: “com.apple.PlaygroundsMac.ExecutionExtension”. syspolicy.execution-policy-bypass: YES. rtcreportingd: YES. tcc.allow-prompting: “kTCCServiceAll”.
Avatar
omochimetaru 4/1/2020 3:23 AM
syspolicy.execution-policy-bypass: YES.
↑強そう
Avatar
Kishikawa Katsumi 4/1/2020 3:30 AM
Apple private exceptionは一般のベンダーには無理なやつかな
Avatar
omochimetaru 4/1/2020 3:30 AM
審査落ちしそうですね
Avatar
norio_nomura 4/1/2020 4:19 AM
これら全部がSourceKitの動作に必要だとは思えないんですよね。
4:20 AM
以前、Sandbox下でSourceKitを使うにはどんなentitlementsが必要なのか少し調べたけど、当時ドキュメントに載ってたものからは条件を見つけられなかった。 (edited)
4:21 AM
今ならSwift Playgroundsの持つentitlementsを基に調べられるかも?
Avatar
審査員を買収する感じで
Avatar
@swiftbot print(1)
Avatar
swiftbot BOT 4/20/2020 8:08 PM
Author icon
yyu
print(1)
Version:
swift-5.2-RELEASE
Output:
1
Error:
Avatar
@swift-5.1.5 protocol Initializable { init() } struct MyStruct: Initializable { init() {} } protocol P { associatedtype Assoc func foo() -> Assoc func bar() -> Assoc } struct S: P { func foo() -> some Initializable { return MyStruct() } func bar() -> Assoc { return Assoc() } }
Avatar
no output
Avatar
omochimetaru 4/29/2020 7:06 AM
associatedtype の some type の 同値推論って入ってたのか
Avatar
Assoc@returnTypeOf(P.foo()) に推論されてそれが使えるみたいですね。associatedtype が複数箇所で使われてたら some は使えないとおもってた。
Avatar
omochimetaru 4/29/2020 7:09 AM
プロポーザルには書いてあったけどすぐには実装されなかったんです
7:10 AM
@returnTypeOf(P.foo())
そっか、これでいいのか
7:10 AM
fixed opaque type at P.Assoc みたいな別概念で処理するのかと思ってた
Avatar
正確には @_opaqueReturnTypeOf("$s5test21SV3fooQryF", 0) 🦸
Avatar
omochimetaru 4/29/2020 7:11 AM
@swift-5.3.3 protocol Initializable { init() } struct MyStruct: Initializable { init() {} } protocol P { associatedtype Assoc func foo() -> Assoc func bar() -> Assoc } struct S: P { func foo() -> some Initializable { return MyStruct() } func bar() -> some Initializable { return MyStruct() } }
Avatar
exit status: 1 with stderr:<stdin>:13:8: error: type 'S' does not conform to protocol 'P' struct S: P { ^ <stdin>:8:18: note: ambiguous inference of associated type 'Assoc': 'some Initializable' (result of 'S.bar()') vs. 'some Initializable' (result of 'S.foo()') associatedtype Assoc ^ <stdin>:15:8: note: matching requirement 'bar()' to this declaration inferred associated type to 'some Initializable' func bar() -> some Initializable { return MyStruct() } ^ <stdin>:14:8: note: matching requirement 'foo()' to this declaration inferred associated type to 'some Initializable' func foo() -> some Initializable { return MyStruct() } ^
Avatar
omochimetaru 4/29/2020 7:11 AM
お〜。わかりやすいエラーちゃんと出る。
7:11 AM
その絵文字いつまでついてんだろう、ジョークじゃないのかw
Avatar
意図はわからんw Parserの時点で @_opaqueReturnTypeOf(...) の後は無視されるからなんでも良いんですけどね。
Avatar
omochimetaru 4/29/2020 7:14 AM
そうなんだw
Avatar
@swift-5.2.5 protocol SomeProtocol {} extension Int: SomeProtocol {} extension SomeProtocol { func toOpaque() -> some SomeProtocol { return 1 } func toProtocol() -> SomeProtocol { return 1 } } extension SomeProtocol { func type() -> String { return "protocol" } } extension Int { func type() -> String { return "int" } } let a = 1.toOpaque() let b = 1.toProtocol() print(type(of: a)) print(type(of: b)) print(a.type()) print(b.type())
Avatar
Int Int protocol protocol
Avatar
🤔 Opaqueわかんない
Avatar
type がwitness tableに載っていないのでtypeメソッドの呼び出しが全部静的になってますねー
11:46 AM
@swift-5.2.5 protocol SomeProtocol { func type() -> String } extension Int: SomeProtocol {} extension SomeProtocol { func toOpaque() -> some SomeProtocol { return 1 } func toProtocol() -> SomeProtocol { return 1 } } extension SomeProtocol { func type() -> String { return "protocol" } } extension Int { func type() -> String { return "int" } } let a = 1.toOpaque() let b = 1.toProtocol() print(type(of: a)) print(type(of: b)) print(a.type()) print(b.type())
Avatar
Int Int int int
Avatar
この挙動も割と理解できないですよね、そもそも私の認識では -> some SomeProtocol-> SomeProtocol の戻り値の型は違うはずなのでは?と思ってましたけど違いましたっけ?Opaque Result Typeはどういう動きだったっけ?
Avatar
ORTは特段ランタイムで具体型に差し変わるわけではない(Genericsと同じ)なので
11:49 AM
例えばGenerics引数で同じことやれば同じ結果になると思います
Avatar
そしたらなぜ protocol SomeProtocol {} extension Int: SomeProtocol {} extension Bool: SomeProtocol {} があるとして、 extension SomeProtocol { func toOpaque() -> some SomeProtocol { return true } func toProtocol() -> SomeProtocol { if [true, false].randomElement()! { return 1 } else { return true } } } 前者は 1true かを場合分けて違う型を返せないんだっけ? (edited)
Avatar
それ分けて返せたらGenericsじゃないですよね
11:55 AM
同じ例をGenericsで言うと (edited)
11:56 AM
func foo<T: Equatable>(arg1: T, arg2: T) これでarg1にtrue、arg2に1を入れようとしてるのと同じ
Avatar
ああつまりORTで返してる型ってGenericsな存在型ですか?
Avatar
swiftのgenericsって存在型だったっけ…
12:02 PM
EとAだっけ?だから違う気がするけど
Avatar
protocolの戻り値は存在型だと思ってたけど違うんだっけ?
12:02 PM
プロパティー宣言の時だけ?
Avatar
入力できん (edited)
12:03 PM
protocolの変数(Existential)は∃ Generics, ORTは∀ でそもそも本質的に異なる
12:04 PM
∀はあってるかわからん
Avatar
あってるはず
Avatar
ヨッシャ
12:05 PM
その上で、PWTに乗ってないprotocol extensionの実装を、具体型に則して引いてくる機能は、swiftの∀型にはないのです (edited)
12:06 PM
じゃあどこが違うかと言うと、Existentialの返り値はGenericsな引数に渡せない。が、ORTはGenericsな引数に渡せます。
12:07 PM
だいたいこれで全部、な気がする
Avatar
なるほど、大体理解できた気がします、ありがとうございます 🙇
Avatar
そもそもの前提として、Swiftのメソッド呼び出しはVTable(クラスのメソッド)かWitness Table(プロトコルのメソッド)に載せない限り常に静的になるという話がありますね。
Avatar
あでも一つまだちょっとわからないのは、 -> SomeProtocol の戻り値って存在型で合ってます?
Avatar
あってます!
Avatar
そしたらなぜ type(of: a) の出力は Int だろ 🤔
12:10 PM
違った、type(of: b) (edited)
Avatar
うーん、端的に言うとtypeの実装がそうなっているから、なんですが、
Avatar
そもそも返り値がMetatypeだし、奴は色々ずるい関数ですね
Avatar
なるほど 😇
Avatar
bのコンパイル時に見える型はSomeProtocolで、実行時の内部に持つ実態としてはIntである、という前提に対して、type(of:)が実行時の実態の型を返す、という話だと思います。
Avatar
仕組み的には、ab は型が違いますよね…?
Avatar
コンパイル時の型ですか?実行時の型ですか?
12:14 PM
いや、実行時は同じか
Avatar
type(of:)の卑怯さはOptionalの型をつっこむと本領発揮した記憶が
12:16 PM
あれ?Optionalになるんでしたっけ、あやふやだ
12:18 PM
@swift-5.3.3 print(type(of: Optional(1) as Any)) (edited)
Avatar
Optional<Int> (edited)
Avatar
うーん、嘘を言ったかもしれないなぁ @swift-5.2.5 func printType<T>(_ v: T) { print(type(of: v)) } protocol P {} extension Int: P {} let a: P = 1 printType(a) print(type(of: a))
Avatar
P Int
Avatar
@swift-5.2.5 protocol SomeProtocol {} extension Int: SomeProtocol {} extension Bool: SomeProtocol {} extension SomeProtocol { func toOpaque() -> some SomeProtocol { return 1 } func toProtocol() -> SomeProtocol { return 1 } } let a = 1.toOpaque() let b = 1.toProtocol() withUnsafeBytes(of: a) { (pointer) in print(pointer.count) } withUnsafeBytes(of: b) { (pointer) in print(pointer.count) }
Avatar
8 40
Avatar
とりあえず内部的には確かに違う型になるっぽい
Avatar
typeは型システムの中でも特別扱いされていて、ランタイムの挙動も複雑
Avatar
omochimetaru 8/4/2020 12:24 PM
それP出てくるのか・・・>かていくんの書いたやつ (edited)
12:26 PM
あ、そうですよ>らびさん
12:26 PM
ortはジェネリックパラメータ型なのでポインタサイズ
Avatar
確かに printType(b) だとちゃんと SomeProtocol が出る
Avatar
omochimetaru 8/4/2020 12:27 PM
protocol typeはexistentialなのでだいたい40
Avatar
でも a.type()int ではなく protocol が出るのは、単純にコンパイル時に静的ディスパッチでprotocolのメソッドが割り当てられたからですか?
Avatar
そうですね、protocolによる制約が無いprotocol extensionのメソッドは常に静的になります (edited)
Avatar
なるほど、これでようやく色々理解できました、ありがとうございます!
Avatar
omochimetaru 8/4/2020 12:30 PM
@swift-5.3.3 protocol P {} extension Int: P {} func fooP(_ a: P) { print(type(of: a)) } func fooT<T>(_ a: T) { print(type(of: a)) } func fooPT(_ a: P) { fooT(a) } fooP(1) fooT(1) fooPT(1)
Avatar
Int Int P
Avatar
僕は新たな疑問が生まれましたw
12:30 PM
なるほど
Avatar
omochimetaru 8/4/2020 12:30 PM
typeofの評価式が静的なexistentialの場合内部の型を返して
12:31 PM
静的にgeneric param typeの場合は置換された型を返す(ここでexisの展開はしない)
12:31 PM
ってことかな
Avatar
ぽいですね、コンパイル時の意味と実行時の意味が一致してなさそう
Avatar
omochimetaru 8/4/2020 12:31 PM
静的なコンテキストと動的なコンテキストの組み合わせによって結果が決まる
Avatar
えー、これどうなんだ…
Avatar
omochimetaru 8/4/2020 12:33 PM
微妙な気はするが
12:33 PM
こんな動的な型操作しないので困らない・・・
Avatar
@swift-5.2.5 protocol P { static func foo() } extension P { static func foo() { print("P") } } extension Int: P { static func foo() { print("Int") } } func callFoo<T>(_ v: T) { print("Calling foo for \(type(of: v))") print("T is P ? \(T.self is P.Type)") if let t = type(of: v) as? P.Type { t.foo() } else { print("Failed to cast") } } let a: P = 1 callFoo(a) callFoo(1)
Avatar
Calling foo for P T is P ? false Failed to cast Calling foo for Int T is P ? true Int
Avatar
omochimetaru 8/4/2020 12:45 PM
type(of: v)P なのに as? P.Type が 失敗するの・・・?
12:47 PM
@swift-main protocol P {} extension Int: P {} func checkT<T>(_ t: T) { let tIsP1 = type(of: t) == P.self print("tIsP1=\(tIsP1)") let tIsP2 = type(of: t) is P.Type print("tIsP2=\(tIsP2)") } let a: P = 1 checkT(a)
Avatar
swiftNightly BOT 8/4/2020 12:48 PM
tIsP1=true tIsP2=false
Avatar
omochimetaru 8/4/2020 12:48 PM
@swift-main protocol P {} extension Int: P {} print(P.self is P.Type) print(P.self is P.Protocol) print(Int.self is P.Type) print(Int.self is P.Protocol) (edited)
Avatar
swiftNightly BOT 8/4/2020 12:48 PM
false true true falsestderr:<stdin>:5:14: warning: 'is' test is always true print(P.self is P.Protocol) ^ <stdin>:6:16: warning: 'is' test is always true print(Int.self is P.Type) ^ <stdin>:7:16: warning: cast from 'Int.Type' to unrelated type 'P.Protocol' always fails print(Int.self is P.Protocol) ~~~~~~~~ ^ ~~~~~~~~~~ (edited)
Avatar
P.Type が存在型…?
Avatar
omochimetaru 8/4/2020 12:51 PM
is P.Type はその型の値が existential P に代入できる型かどうかを示しているんじゃないか? existential P それ自体は conform P していないから、 P に代入できない
12:51 PM
その型それ自体が existential P であるかどうかのテストは is P.Protocol
Avatar
いや違うな Int.self is P.Typefalse だよな
12:51 PM
なるほど
Avatar
omochimetaru 8/4/2020 12:52 PM
この、 P.Protocol って記法、最近見つけて、いつからあったのか、どういう意味なのか、わからないままだった。
Avatar
そんなのあったのか
Avatar
あー、.Protocolってそういうユースケースだったのか
Avatar
(今更だけどもしかしてこの話題 #swift とかの方が良かった…?
Avatar
omochimetaru 8/4/2020 12:53 PM
(まあチャンネルは間違ってますね 多分 #swiftbot-sandbox のつもりだったんだろうなと思っている)
Avatar
本当だ
Avatar
うん最初は動作を見たいだけのつもりでしたね 😇
Avatar
omochimetaru 8/4/2020 12:55 PM
その場合は #swiftbot-sandbox でしたね、ここは、 iPad で Swiftプログラミングできるアプリの話するばしょ
🤣 1
Avatar
あっ…
Avatar
まるたん 7/22/2023 9:08 AM
こんにちは、数日前にswift-playgroundsを始めたばかりのものです 「コードを学ぼう2」を進めていたのですが、funcで関数を宣言する際、インスタンス名を指定しないと関数が使えないのはなぜでしょうか? 複数のインスタンス間で使いまわせるような関数にしたいのですが… (edited)
Avatar
出てるエラーとコードから推測すると、Expertオブジェクトのメソッドを呼ぶはずが、オブジェクトの指定が無いので関数が見つからずにコンパイルに失敗してるようです。 classやstruct以下に宣言されたメソッドは、そのオブジェクトに属することでスコープやselfの参照を切り分けています。 スコープやselfの参照が切り分けられることで、globalな関数では実現しにくいものが簡単に書けるようになります。 オブジェクト指向の初頭でこの辺りは学べるので良い資料があればいいんですが…
9:53 AM
昨今のオブジェクト指向の風当たりを考えるとGoogle検索では辿り着きにくいか
Avatar
ChatGPTにカプセル化について聞いてみたが、あんまり芳しい結果にはならなさそうでした。 オブジェクト指向のうちカプセル化について一度調べてみて、解らないことがあればまた聞きに来て下さい
10:05 AM
あと質問全般は #beginner-help_archived チャンネルがオススメです
Avatar
Avatar
tarunon
出てるエラーとコードから推測すると、Expertオブジェクトのメソッドを呼ぶはずが、オブジェクトの指定が無いので関数が見つからずにコンパイルに失敗してるようです。 classやstruct以下に宣言されたメソッドは、そのオブジェクトに属することでスコープやselfの参照を切り分けています。 スコープやselfの参照が切り分けられることで、globalな関数では実現しにくいものが簡単に書けるようになります。 オブジェクト指向の初頭でこの辺りは学べるので良い資料があればいいんですが…
チュートリアル的な側面が強いのでclassが出てこないんですよね…
10:18 AM
letが出てくるまでは指定しなくても良かったんですが、初期化の話が出てきてからは関数にインスタンス名をつけないと画像みたいなエラー が出るようになりました
Avatar
Avatar
tarunon
あと質問全般は #beginner-help_archived チャンネルがオススメです
わかりました、ありがとうございます
Exported 206 message(s)
Timezone: UTC+0