Guild icon
swift-developers-japan
コミュニティ / waiwai-swiftc
Avatar
@hiragram Connpass公開してくだせえ
Avatar
あれ、もうする?
Avatar
あ、しないのか
Avatar
登壇者ある程度募ってからでは
Avatar
とりあえず場所と日付を告知したい。
Avatar
会場案内のテキストとか用意してもらってるから、それはまだちょっとさき
12:18 PM
そうそう
Avatar
僕とおもちだけだと開催が危ぶまれるぞ
Avatar
↑とりあえず チャンネルのとこにかいた
Avatar
日付は12月4日で場所はメルカリ社です
12:19 PM
会場提供ありがとうございます
Avatar
残念。12月1日なら東京にいるのに。
😢 4
Avatar
12/4は別イベントの運営で行けません🙏
Avatar
@d_date @lovee @omochimetaru じゃあおいら行きます!!
Avatar
平和で楽しい議論をわいわいやりたい方はどんどん声を上げていただければ
Avatar
よろしくおねがいしますー
👋 3
Avatar
iOSのDiscord Offline会とかまじか。 会場のメルカリのキャパわからんから、どのくらいの規模になるんだろう
3:17 PM
まだ調整中ですが30から40くらいの人数になるかと思います
3:17 PM
わいわいやりましょう
🙌 4
Avatar
地方勢なので参加できませんが、実況や感想など楽しみにしております。 Discordのビデオ通話で、映像配信があったりするのでしょうか。
Avatar
yutailang0119 11/17/2017 1:59 AM
connpassまだかな
Avatar
@Puramu 映像配信は検討中です @yutailang0119 登壇者の数見てからもうちょっと形式についてまとめてからconnpass立てる予定です(下書きで非公開の状態になっています)
👍 2
Avatar
# iOS Discord Offline ## とは 日頃SwiftやiOSについて深く熱い議論が交わされているDiscordのios-discord-japanサーバーのミートアップです。より多くの人にDis cord上で発信してもらうために、普段アクティブに活動しているメンバーが実際に意見を交わす様子をパネルディスカッション形式で見られるイベントです。 Discord上でのやり取りがあまりに速く進むので、ついていけない、怖いといった印象をお持ちの方がいるかもしれませんが、そんなことないよ、平和で楽しいよ、と いうことがお伝えできればと思います。 ios-discord-ja...
🙌 2
1:03 PM
よろしゅう!
Avatar
これって僕は参加者のほうクリックしないほうがいいのか?
Avatar
しなくていいと思うw
Avatar
もうしちゃった・・・
Avatar
いいけどw
Avatar
枠が29になってしまった。
Avatar
キャンセルもできるし、別にしてもしなくてもいいよー
Avatar
キャンセルすると「キャンセルした人」に表示されるようになって余計混乱を招きそう
Avatar
じゃあそのままで
Avatar
あい
1:48 PM
映像配信はしない事にしました。 初回で運営も手探りのためシンプルにします。 期待していた地方勢の方が居たら申し訳ないです。
👌 3
Avatar
@omochimetaru 配信は大変だと思うけど録画はどうでしょう?音声拾うのが大変かな?
Avatar
録画よりDiscordのScreen sharingとかの方が良さそうな気がする。 https://support.discordapp.com/hc/en-us/articles/115000982752-Screen-sharing-Video-Calls
In addition to being a pretty sweet voice & text chat app, Discord can offer you and up to 9 of your closest compadres an equally awesome video and screen sharing experience.  Woah. Totally. Wi...
12:45 AM
けど、どちらにしても結構大変だよね。
12:46 AM
Liveのみならダメで元々とも思える。
Avatar
運営側のリソース的に映像収録まで常に気にしていられるかどうかわからないので、今回大盛り上がりして次回があったらそこで映像も検討という感じにさせていただきたいっす 🙏
👍 5
Avatar
今日だ
🐦 4
Avatar
たのしみにしています
3:38 AM
@tarunon 体調いきてますか
Avatar
出社してますよ、大丈夫です
Avatar
よかったよかった
Avatar
気がついたらテーマが設定されてた
Avatar
omochimetaru 12/4/2017 5:36 AM
テーマ?なんのこと? (edited)
Avatar
テーマ 第一部: モダンなプログラミング言語としてのSwift Swiftの言語仕様やコンパイラなどについて語ります。 キーワード Swift 4.1 SwiftとObjective-C Swiftと他の言語 マルチプラットフォーム Conditional conformance Memory ownership 第二部: iOSアプリの開発言語としてのSwift iOSアプリを開発するにあたって、よりSwiftyな手法やAppleのフレームワークとの上手な付き合い方などについて語ります。 キーワード UIKitとIUO より安全にUIKitを扱う方法
Avatar
今気づくな
Avatar
omochimetaru 12/4/2017 5:36 AM
おせえよw
5:36 AM
連絡してたじゃんw
Avatar
脳みそが停止してたと思う
Avatar
omochimetaru 12/4/2017 5:37 AM
そっちは異常な早朝だった可能性ある
Avatar
二度寝前に行動して記憶が欠落してるパターンか
Avatar
前半はモダンなプログラミング言語としてのSwiftについて、後半はiOSアプリ開発言語としてのSwiftとして
5:38 AM
ディープな話をしてもらうぞ
🙆 1
Avatar
飲食物って、懇親会までは無いですか?(懇親会の21時までのはらぺこりん対策をするか否かで気になっています 🤔 )
Avatar
オッ @jollyjoester さんいかがでしょうか
7:29 AM
ちなみに、タイムスケジュール上では21時懇親会スタートとなっていますが、実際の進行の様子によっては20時半くらいまで前倒しになる可能性ありです
👀 1
Avatar
jollyjoester 12/4/2017 7:29 AM
いまのところ懇親会からご飯の予定(20:30-20:50くらいに準備)ですが、可能なら早めてもらうようにしますか
🙏 2
Avatar
あ、いずれか知りたかっただけなので、早めていただくとかの調整は僕は求めて無いです 🐶
7:31 AM
開場とともに、飲み物・軽食をつまめる勉強会もあるので、今日のはどういう形式なのかなと 🤔
Avatar
omochimetaru 12/4/2017 7:32 AM
(勉強会経験が浅くて なるほどそういうのもあるんだなあ ひらり任せた)
Avatar
jollyjoester 12/4/2017 7:32 AM
今日は懇親会からの予定です^^/
実際の進行の様子によっては20時半くらいまで前倒しになる可能性ありです
ここに反応してやべ、早めるかってなりましたw
Avatar
あ、なるほど、確かに。 了解です、ありがとうございます 🙆
Avatar
omochimetaru 12/4/2017 9:54 AM
フロアめちゃめちゃ広い!!
Avatar
ひゃー
9:54 AM
1人4つくらい椅子ある
🙀 1
Avatar
おしりが 4 つ必要
😁 1
Avatar
クアッド尻
Avatar
おしりは初期状態で2つなのか1つなのか問題
Avatar
1 物理 2 論理
Avatar
入場始まってるので、きてね〜
Avatar
すみません、10分弱遅れます!!🙇
Avatar
yutailang0119 12/4/2017 10:23 AM
六本木には着
Avatar
はじまるぞ!
Avatar
すごいあっとほーむな感じ
Avatar
ここで実況してください~マルチポストも歓迎です!
Avatar
discord の集まりだけど #ios_discord ハッシュタグとはこれいかに
Avatar
Bot疑惑が晴れましたね
Avatar
ワイワイ
10:35 AM
ハードル下げたい
Avatar
一説によると僕と @omochimetaru は同一人物で自作自演とか言うのを聞いた事がある
Avatar
リモート参加👀
Avatar
同一人物説w
Avatar
野生のSwifterが現れる?!
Avatar
( ´・?・`)
10:38 AM
なめくじさん
Avatar
生息域
Avatar
あの方がなめくじさん🤔
Avatar
@tarunon の存在確認を初めてした
Avatar
事象ではなく個人ですよ!
😀 1
Avatar
あの方がおもちめたるさん🤔
Avatar
おなかが不安定なおもちめたるさん
Avatar
ROM専な @takasek さん
Avatar
「ほぼFiNC」というところで働いてらっしゃる
Avatar
Yoshikuni Kato 12/4/2017 10:40 AM
来ました(初投稿)
Avatar
会場にいないけど、なにやってるかわかる
Avatar
最近はSwift 4.1のリリースに関する事が話題
10:41 AM
swift.orgからダウンロード出来る
Avatar
yutailang0119 12/4/2017 10:42 AM
誰もApple TVを取れない
Avatar
(macがミラーリングしているつもりになっているとは🤔)
Avatar
事故
Avatar
Swift is a general-purpose programming language built using a modern approach to safety, performance, and software design patterns.
Avatar
https://apple.github.io/swift-evolution/ Swift 4.1に入るやつ・入りそうなやつはここで一覧できます
👀 1
10:43 AM
swift-evolution/0143-conditional-conformances.md at master · apple/swift-evolution https://github.com/apple/swift-evolution/blob/master/proposals/0143-conditional-conformances.md
swift-evolution - This maintains proposals for changes and user-visible enhancements to the Swift Programming Language.
Avatar
struct Box<T> { let value: T } extension Box: Equatable where T: Equatable { static func == (lhs: Box, rhs: Box) -> Bool { return lhs.value == rhs.value } }
10:45 AM
Swift is a general-purpose programming language built using a modern approach to safety, performance, and software design patterns.
Avatar
↓昔の状態 func ==<X>(a: [X], b: [X]) where X: Equatable { ... } (edited)
Avatar
//:configuration = Debug OTHER_SWIFT_FLAGS = -enable-experimental-conditional-conformances //:configuration = Release OTHER_SWIFT_FLAGS = -enable-experimental-conditional-conformances //:completeSettings = some OTHER_SWIFT_FLAGS
Avatar
takasek さんがんばって
Avatar
unknown.png
Avatar
ambiguous
Avatar
(何が起こってるのか会場にいてもわからないw)
Avatar
🙅 ambitious
Avatar
ambitious
Avatar
グダグダw
Avatar
yutailang0119 12/4/2017 10:47 AM
1人佇む @takasek
Avatar
(今なんの話をしているのかわかってない...。1回で理解できなかった...。)
Avatar
@tarunon 黙らないで
Avatar
もくもく
Avatar
こうしようねという話
👀 1
Avatar
これプロジェクト?Playground?
Avatar
画面きびしいなあ
Avatar
cond conf = Conditional Conformance
Avatar
「Xcodeで飛ぶのは難しい」
Avatar
「Xcodeで飛ぶのは難しい」
Avatar
昔の環境に戻してコンパイルエラーなの見えるとおおってなりそう
Avatar
みんな定義に飛べない
Avatar
cond confが使えると、Boxに適用されているEquatableが中のvalueにも適用される?
Avatar
逆ですねそれは
Avatar
@ktanaka117 多分逆で、中身がEquatableならBoxもEquatableになれる だと思います
Avatar
なるほど、多謝🙏
Avatar
swift-evolution - This maintains proposals for changes and user-visible enhancements to the Swift Programming Language.
Avatar
Person書き始めたところから理解が追いつかなくなってきた
Avatar
(Javaの話わからん...!)
Avatar
さすが濃いメンツ!
Avatar
yutailang0119 12/4/2017 10:58 AM
Personは全てのプロパティがEquatableだから、Personの==は書かなくてよい?
Avatar
@yutailang0119 そこまではなんとなくわかった
10:59 AM
あれ、というかこれって第一部ですらないの?w
Avatar
Yoshikuni Kato 12/4/2017 10:59 AM
Objective-C required us to wax philosophic about the nature of equality and identity. To the relief of any developer less inclined towards handwavy treatises, this is not as much the case for Swift.
10:59 AM
いつもHashableつくるとき、ここの方法でやってるんですが、これって問題あるんでしょうか・・・?
👀 1
Avatar
a
68.04 KB
Avatar
yutailang0119 12/4/2017 11:00 AM
@omochimetaru < ↑これを読めばわかる
Avatar
なんでこんなん読めるんwww
Avatar
swiftc -emit-sil a.swift > a.txt
11:03 AM
swift-evolution - This maintains proposals for changes and user-visible enhancements to the Swift Programming Language.
Avatar
15分越しぐらいに実行できた
👍 1
Avatar
// Will not currently compile protocol Sequence { associatedtype SubSequence: Sequence where Iterator.Element == SubSequence.Iterator.Element, SubSequence.SubSequence == SubSequence // Returns a subsequence containing all but the first 'n' items // in the original sequence. func dropFirst(_ n: Int) -> Self.SubSequence // ... }
Avatar
This pull request implements the standard library part of SE-0157: Recursive Protocol Constraints, which includes: Make the SubSequence associated type have the same capabilities as its enclosing ...
Avatar
This pull request implements the standard library part of SE-0157: Recursive Protocol Constraints, which includes: Make the SubSequence associated type have the same capabilities as its enclosing ...
Avatar
enum-convertible - Protocols for enum abstraction.
Avatar
gysb - Generate your swifty boilerplate
11:08 AM
↑これね
Avatar
swift-evolution - This maintains proposals for changes and user-visible enhancements to the Swift Programming Language.
11:10 AM
// Test for a simulator destination #if (arch(i386) || arch(x86_64)) && (!os(macOS)) print("Simulator") #else print("Device") #endif // More restrictive test for iOS simulator // Adjust the os test for watchOS, tvOS #if (arch(i386) || arch(x86_64)) && os(iOS) // iOS simulator code #endif
Avatar
#if targetEnvironment(simulator)
👀 1
11:12 AM
Swift近況は https://swiftweekly.github.io のメルマガ購読するとコスパ良く追えてオススメです( ´・‿・`)
A community-driven weekly newsletter about Swift.org
👀 4
🙏 1
Avatar
@Kishikawa Katsumi さんに前に上がってほしいなw
☝ 7
Avatar
お、席がちょうど1つ空いてる👀
👀 1
11:16 AM
go
11:16 AM
Avatar
20時までが1部だった予定 (edited)
Avatar
第一部強制終了w
Avatar
第1部強制終了
Avatar
いい司会
Avatar
いや、予想してたんだけど時間が全く足りないぞ
Avatar
10分で2部やるぞー
11:17 AM
and drink
Avatar
第二部はiOSアプリを開発する言語としてのSwift
11:18 AM
UIKitとSwiftの相性よくないところはあるよね
Avatar
先に休憩ですよ!
Avatar
岸川さんが後半に前に出てきたの予定調和ぽい( ´・‿・`) (edited)
Avatar
tarunon/Instantiate: Type-safe and constructor injectable InterfaceBuilder protocols. https://github.com/tarunon/Instantiate ゴング置いときます
Instantiate - Type-safe and constructor injectable InterfaceBuilder protocols.
👍 1
Avatar
えっなにそれは
Avatar
(これ聞きたい)
Avatar
めっちゃたのしそうだ…!
Avatar
めっちゃ食べ損ねた
11:29 AM
ごちそうさまでした🙇🙇🙇🙏🙏🙏
🙏 1
Avatar
protocolinit を書くと self を上書きできる
Avatar
dependencyのスペルはあってた
😜 1
Avatar
ライブコーディング 👀
Avatar
protocol で init を書くと self を上書きできる
protocol extensionの中で実装するとselfを上書きできる
☝ 1
11:32 AM
やってやってーキャッキャ/
Avatar
coder aDecoder: NSCoder を実装すれば🤓
11:35 AM
static func make() -> Self を実装すれば良いのでは
Avatar
わかる!
Avatar
岸川さんエンジンかかってきた
Avatar
init(withNibName: ) にnilをつっこむと、その<クラス名>.nibから生成できる
Avatar
いいぞやれやれー
Avatar
Yoshikuni Kato 12/4/2017 11:38 AM
prototype cellですね
Avatar
cellはxib派とcase by case派
Avatar
VCとxibの組み合わせで使われることって多いんですか?
Avatar
最近もろxib派でやってたわw
👀 1
Avatar
cellはもとよりxib派だった 👀
Avatar
確かにオフラインの方が和気あいあいで暖かい感じ( ´・‿・`)終始なごやか( ´・‿・`) (edited)
😇 1
Avatar
おもちめたる氏の連続する「なんかオシャレなの」
😎 1
Avatar
segueやっぱ使わないよね
Avatar
segueはオワコン説
Avatar
たしかにContainerはSegueでつないでるわ
Avatar
Yoshikuni Kato 12/4/2017 11:40 AM
segue使うか使わないかこの前会社の人と議論してちょっと気まずくなりました・・・(私は使わない派)
Avatar
Swiftの話は飛んでいった
Avatar
AutoLayoutはコードで書く派だ
Avatar
case by case で柔軟にやろう!
Avatar
ワークアラウンド職人
Avatar
でもUITableViewControllerつかう?
Avatar
岸川さん警察👮
Avatar
適切に選べる
Avatar
UITableViewControllerはまあまあ使ってる 🐶
Avatar
UIViewControllerにUITableView貼り付けてやること多いかなぁ
🙋 2
Avatar
Yoshikuni Kato 12/4/2017 11:43 AM
たまにTableViewControllerの方が便利なことある
Avatar
UITableViewController, UICollectionViewControllerは使った事ない
Avatar
そうか、TableViewController in ContainerView で使うのがよいのか
Avatar
yutailang0119 12/4/2017 11:44 AM
static cell使いたい設定画面とか
👆 3
Avatar
UITableViewController、Container Viewで使えば大体良いよねで落ち着きつつあって同感
Avatar
Yoshikuni Kato 12/4/2017 11:46 AM
stackview + scrollview, 割と使ってるかも・・・
Avatar
Disclosure Indicator(右端にある>みたいなやつ)ほしいときとかもTableViewのほうが楽そう
Avatar
岸川さんが良い感じに保守派でバランス良い( ´・‿・`)
Avatar
え、Discordのオンライン率、高すぎ...!
Avatar
Swift関係ないぞ
Avatar
「ios-developers-japan」サーバーだから何の問題も無いぞ
👽 2
Avatar
第二部: iOSアプリの開発言語としてのSwift
Avatar
😆 4
😩 1
😂 2
Avatar
Yoshikuni Kato 12/4/2017 11:49 AM
Avatar
大事: ケースバイケースなんですけど
Avatar
頑張って作る理由とか意図とかちゃんと考えてっていう話
Avatar
これはえぐい
Avatar
確かにAppleが作ってるUIをデザイナーが真似しちゃう事あるある
Avatar
Yoshikuni Kato 12/4/2017 11:51 AM
でもこういうデザイン出てくることよくあるなぁ・・・w
Avatar
我々はきちんと説明しないといけないんですよ
Avatar
このアプリのこの感じ実装してとかよくある
Avatar
でもここまで見て参考にしてくれるデザイナーだったらかなりいi
Avatar
yutailang0119 12/4/2017 11:51 AM
笑っちゃう岸川さん
Avatar
なぜか角丸になってるの身に覚えがありすぎる (edited)
Avatar
ついに正式リリースとなった「iOS11」多数の機能追加を含む大幅なアップデートとなりました。しかし一部で「ダサすぎる」と話題になっています。いったいどういうことなのでしょうか。 原因は「タイポグラフィー」 このことはデザイナーのライアン・ラオ氏がベータテスター中に発見したものです。それは英語版によるものですが、ここでは日本語版についてみてみましょう。タイポグラフィーとは、文字を美しく読みやすくする技術のこと。美しいとはどういうことか、みていただけると思います。 まずは、「メモ」アプリと「メール」アプリをみてみましょう。タイトルの始まりのマージンに統一性がありません。「メモ」ではかなり狭く設定されているのに対し、メールは広く設定されています。 さらにメールボックスの文字をみてみましょう。タイトル文字間の調整カーニングがされていません。簡単にカーニングしてみたものが右になります。どちらが「美しい」でしょうか。 その他のアプリでもデザインの問題が 例えば「天気」アプリですが、こうして中心線を引いてみると、「23°」という位置がずれて見えませんか? ラオ氏は「iOS10」との比較画像で指摘しています。 同じく「iOS10」との比較で、「Apple ID」の一貫性のなさも指摘しています。 どうした?アップル!? アップルはその美しいカリグラフィーやタイポグラフィーを導入したことで、パソコンのデザインという新たな価値を生み出しました。Windowsと比べてみると、通常使っているフォントから美しさがあります。 それが「iOS11」になっていきなりどうしたのでしょうか。次期のアップデートで改善されるのか。Apple信者はそう信じたいところでしょう。 参考URL:hackernoon
Avatar
yutailang0119 12/4/2017 11:53 AM
メッセージ送る人がいないからわからない
😢 4
Avatar
なんかそもそもこの 「新着メッセージ」 のマージンが心を不安にさせる() (edited)
😫 2
Avatar
yutailang0119 12/4/2017 11:55 AM
岸川さん、最初から登壇が決まっていたかのような順応
Avatar
ワークアラウンド
Avatar
今公式のメールアプリ触ってて気づいたけど、メールボックス一覧からメールボックス開いて右手の親指で編集ボタン押さえて左手の親指で戻るボタン押すっていうのを2回くりかえすとメールアプリが落ちます
👀 5
💩 1
Avatar
work around がお仕事
Avatar
Yoshikuni Kato 12/4/2017 11:56 AM
新しいSwiftyなUIKitが今後登場することはないんでしょうか・・・?
👍 4
Avatar
yutailang0119 12/4/2017 11:56 AM
よく言われる UXKitはよ
Avatar
公式に登場することを願いつつ、独自にそれっぽいやつ作るのは良くないなあ、と感じます( ´・‿・`)
👍 3
Avatar
rintaroさんも前に上がってしまえばいいのでは?
👆 3
👍 2
Avatar
まだ2席空いてるらしい
👍 1
Avatar
クラスクラスター = initした時にそのクラスでないクラスを生成することができる作り?
Avatar
tauronさんが書いてくださってて感謝しかない
👍 1
✌ 1
Avatar
Swiftの場合「initした時はそのクラスを返却しなければ行けない」という制約がある? (edited)
Avatar
Dogもいる
12:04 PM
tarunonさん空気読みつつコードに落とし込む能力すごすぎる
😁 1
✌ 1
Avatar
(これどこで使うんだろう🤔)
12:05 PM
この記事は、俺コン Vol.1 / Day. 2 - connpassでの発表を、文章としてリライトしたものです。 スライド版: [ ![ima...
Avatar
(Discordっぽさとは🤔)
Avatar
ありがたい
Avatar
面白くなってきた
Avatar
protocol Factoryable { init(factory: () -> Self) } extension Factoryable { init(factory: () -> Self) { self = factory() } } class MyAnimal: Factoryable { convenience init(name: String) { if name.contains("Cat") { self.init { MyCat() } } else { self.init { MyDog() } } } } class MyCat: MyAnimal { var meou: String { return "meou" } } class MyDog: MyAnimal { } let x = MyCat(name: "Dog") x.meou // Crash!!
Avatar
yutailang0119 12/4/2017 12:07 PM
俺コン Vol.1 / Day. 2 - connpass https://orecon.connpass.com/event/64285/ での発表資料です。

参考資料

リーダブルコード ―より良いコードを書くためのシンプルで実践的なテクニック (Theory in practice) | Dustin Boswell, Trevor Foucher, 須藤 功平, 角 征典 |本 | 通販 | Amazon https://www.amazon.co.jp/dp/4873115655 Amazon | 新装版 リファクタリング―既存のコードを安全に改善する― (OBJECT TECHNOLOGY SERIES) | Martin Fowler, 児玉 公信, 友野 晶夫, 平澤 章, 梅澤 真史 通販 https://www.amazon.co.jp/dp/427405019X
Avatar
World // Crashed!! (edited)
😇 1
Avatar
にゃーん
Avatar
ほーーー
Avatar
Shinji.Kobayashi 12/4/2017 12:11 PM
やばい挙動ですね
Avatar
これなった
Avatar
d_dateさんの投稿が拾われている
👀 1
Avatar
おなじよね
Avatar
@d_date CLEM終わったんw
Avatar
たまたまバイナリが重なっている??
12:16 PM
どんどんヤバい生き物になっていっているw
12:16 PM
誰かいい加減殺してあげて!!
Avatar
ついにXcode毎吹き飛んだ
Avatar
カタカナ出てきたら通訳してくれる @takasek 優しい
😊 1
Avatar
Phantom Typeの説明が「型パラメータで状態を持つ」ってのめっちゃわかりやすい説明だった
Avatar
import Foundation protocol Factoryable { init(factory: () -> Self) } extension Factoryable { init(factory: () -> Self) { self = factory() } } class MyAnimal: Factoryable { convenience init(name: String) { if name.contains("Cat") { self.init { MyCat() } } else { self.init { MyDog() } } } } class MyCat: MyAnimal { var meou: String { return "meou" } } class MyDog: MyAnimal { func bark(arg: String) -> String { return arg } } let x = MyCat(name: "Dog") let y = x.meou // Crash!!
😱 1
Avatar
Xcodeを絶対殺すヤバいコード
😄 2
Avatar
どうも
Avatar
「このチャンネルで話してるこの話ってどういうこと!?」 と思った方は #beginner-help_archived へ!
🙋 5
12:20 PM
めちゃくちゃ面白かった!あざます!!!
Avatar
2か月か1ヶ月に1回やりたいね! (と誰かが言っていた (edited)
Avatar
六本木キラキラしててキツいものがあったので、オンラインはありがたい
🌞 3
😎 2
Avatar
関東組以外は参加大変だし、OnlineでVCでやれるといいね〜 (と誰かが言っていた (edited)
👍 2
Avatar
@hiragram#0393 このあと登壇してたw
Avatar
@here 昨日のをまとめたのでよかったら見てね。 っ https://dev.classmethod.jp/event/event-report-ios-discord-offline-1/
はじめに おばんです、田中です。 今日はDiscord上に存在するios-discord-japanというコミュニティのミートアップに参加してきたので、レポートをお届けします。 ios-discord-japan の普段 […]
👏 18
💯 3
🎅 1
Avatar
@ktanaka117 ありがとうございます! ここで断片的にしか追えてなかったので、どんなことをどんな雰囲気で話されていたのかとてもよくわかって、うれしいです!
😊 1
Avatar
@everyone おはようございま〜す 昨日イベントに参加していただいた方、会場には来れなかったけどチャットを見ていて下さった方、ありがとうございました! やる前は盛り上がるかどうか結構不安だったんですが、懇親会ではいろいろいい声をいただけて嬉しかったです。 特に昨日会場に参加された方に、イベントのフィードバックのためのアンケートにご協力頂きたいです。 https://docs.google.com/forms/d/e/1FAIpQLSeZTzNyx-jlrDPw5th77ZpNGeB2v69omv-3x8cKraIal4HHjw/viewform またやってほしい、次も参加したい、という声が多かったら、映像配信なども含めて改めていろいろやっていけたらなと思っています。よろしくお願いします
頂いた意見は今後の参考にさせていただきます。ユーザー名以外の記入していただいた情報は、ブログ等で紹介させて頂く場合がございます(NGの場合はその旨も記入して下さい)。
🙆 8
Avatar
📦 のまとめブログ読んでるけど、Factoryable の動作闇すぎて興味深い
👻 2
Avatar
めっちゃおもしろかったですよ。メモリレイアウトが感じられて
Avatar
話題の初出は2017/05/19
Avatar
5月は多分まだここに入ってなかったかも 🤔
4:57 AM
というか5月ってことはSwift 3からずっとこの動きでアップルがまだこれ直してないってこと?
Avatar
rintaro - 2017/05/19 https://gist.github.com/rintaro/b16f05411cfe540754285dcc0da60174 Gist factory_init.swift これも Dog(type: "cat") 呼べちゃうっていう問題がきつい この辺で話題になった
4:58 AM
1. 治すのが恐らく大変 2. それによって不幸になる人がどれくらい居るかというと…
5:00 AM
LinuxFoundationだけじゃなくって本体側でも使ってるのかな
5:00 AM
これはテストか
Avatar
omochimetaru 12/5/2017 5:01 AM
// RUN: %target-typecheck-verify-swift -swift-version 4
5:01 AM
swift5になったときにswift4互換挙動としてこれが動くことを担保するために先に書いてあるテストだね
Avatar
ファイル名が dynamic_self_swift4 🤔
Avatar
omochimetaru 12/5/2017 5:02 AM
swift5でなんとかしたいという気配が感じられるファイル名
5:02 AM
// Semi-bogus factory init pattern
Avatar
クラスクラスタで崩壊するのはまあ謂わばエッジケースだし
5:02 AM
悪意を持ってやらないと壊れないからなぁ
5:03 AM
こっちのほうが詳しくあった
Avatar
以前 static func init の話もしてたけど、それは少なくともまだ戻り値の型がちゃんと正しい型でしたな、こいつ Dog なのにデバッグ情報としての型は Cat (edited)
Avatar
convenience initが呼べる条件が、全てのinitが実装されていること、だったかな
5:06 AM
その条件にprotocol extensionで実装されたinitが加味されていないのが問題の中枢
👀 1
5:07 AM
init(factory: () -> Self)のwitness-tableには、Cat,Dogはなくて、Animalだけがある、だから、convenience initはCat/Dogからは呼べない、が正しいと思うんですよね
5:08 AM
この問題僕が随分前に報告したprotocol extension + overridingの問題も関係してくるな
Avatar
そもそもprotocol extensionで self = factory() が書けるのが問題な気が…通常のclassの convenience init でも self = ... はエラーになるはず
Avatar
それはSlava氏曰く出来るはずだ、という話を @rintaro が昨日
5:09 AM
protocol extension + overridingはこれ https://bugs.swift.org/browse/SR-103
5:09 AM
3桁台だ。2桁ゲットできなかったのが悔やまれる
Avatar
omochimetaru 12/5/2017 5:11 AM
そもそもprotocol extensionで self = factory() が書けるのが問題な気が…通常のclassの convenience init でも self = ... はエラーになるはず
そうなんだよね、現状仕様だとclassではself = xx 形式のinitは書けないんだけどprotocol extensionはstructに配慮した仕様になっててそれに巻き込まれてclassでも可能になる
Avatar
convenience initでself=で書けても良いような気はするけどそれはダメなんだっけ
Avatar
omochimetaru 12/5/2017 5:12 AM
今はできないよ、self.initの呼び出しでないといけない
Avatar
protocol SomeProtocol: nonclass くる?
Avatar
omochimetaru 12/5/2017 5:12 AM
でも、だからそれをできる側に整理していこうぜ、ってアイデアがあるという話だったね
Avatar
いや、可能性の問題としてそれを許容すると崩壊するか否か
5:12 AM
nonclass指定はほしいこと結構ありますね
Avatar
omochimetaru 12/5/2017 5:14 AM
それを許容すると一般にinitが返すインスタンスがそれ自身ではなくそれのサブクラスである可能性を認めることになるから、 単純にやると いろんな super.init が地雷原になりそう convenience init みたいに factory init みたいな別概念で区別してオーバライド規定を整理する感じだとうまくいくのかな・・・
Avatar
factory init作って、self代入を許すがサブクラスからは呼べないし、superでコールも出来ない
5:15 AM
こういう仕様ならイケる気がする
Avatar
omochimetaru 12/5/2017 5:16 AM
static functionと何が違うんだ感あるけどまあ
Avatar
initで書きたいんや、という話?w
Avatar
omochimetaru 12/5/2017 5:16 AM
そうなってきそう。
5:17 AM
init? や init() throws があるから他の言語だとstatic funcになるようなやつもinitにできるしね〜
Avatar
class Animal { factory init(name: String) { ... } } class Cat: Animal { init() { super.init(name: "Cat") } } // Compile Error Cat.init(name: "Cat") // Compile Error
5:17 AM
これなら崩壊しないとおも
5:17 AM
init?とinit throwsでなんか困った記憶あるんだよな~~
5:17 AM
なんだったかな
Avatar
omochimetaru 12/5/2017 5:18 AM
↑そうだね、そういうのがよさそう
Avatar
init(throws x: String) throws { // この中でOptionalなsuper.init(convenienceでself.init)を呼んでnilならErrorを出したい } これめちゃくちゃ困ってるんですが、classだけで完結できる方法ありますかね?
5:28 AM
あ、ここオフラインだ
5:28 AM
#swift
Avatar
かっくん 12/5/2017 8:17 AM
そういえば今日配信されてたビルドで struct Box<T> { let value: T } extension Box: Equatable where T: Equatable { static func == (lhs: Box, rhs: Box) -> Bool { return lhs.value == rhs.value } } これが普通に動いてる気がする
Avatar
omochimetaru 12/5/2017 8:20 AM
今日のビルドヤバそうなんですよね 慌てて出したからベータ化されてて有効になっちゃってるとか?
8:20 AM
#xcode チャンネルに書きました。
Avatar
ベータどころかアルファに近そう
Avatar
かっくん 12/5/2017 8:22 AM
ややこしくてすいません。。Swift 4.1 devの話でしたっ
Avatar
@here https://docs.google.com/forms/d/e/1FAIpQLSeZTzNyx-jlrDPw5th77ZpNGeB2v69omv-3x8cKraIal4HHjw/viewform ぶっちゃけ2回目もやりたいのでフィードバックいっぱい下さい!
頂いた意見は今後の参考にさせていただきます。ユーザー名以外の記入していただいた情報は、ブログ等で紹介させて頂く場合がございます(NGの場合はその旨も記入して下さい)。
✅ 4
Avatar
参加者ではないのでフィードバックすることはできませんが、今回は参加できませんでしたので次回開催があれば参加したいです!
🐶 1
🙌 3
Avatar
突然失礼します。UserDefaultsをテキストベースでexport/importできるライブラリとかご存知ないですか (edited)
Avatar
#swift-zatsu が適切かなあ
Avatar
helpでもよさそう
Avatar
ライブラリの話する場所、なかったかも
7:08 AM
ほしいかな
Avatar
チャンネル違いすません!
Avatar
Kishikawa Katsumi 12/7/2017 7:09 AM
dictionaryRepresentationしてからファイルにしたらいいんじゃないかな。
Avatar
テキストにして何したいかが重要そう
Avatar
目的はバックアップ/復元なのですが、型情報の扱いに困っていまして
7:19 AM
dictionaryRepresentation これでやりたいことできそうです。
😀 2
㊗ 3
Avatar
iOS Discord 新年会(ぼそっ
🎍 8
🎉 5
Avatar
今日はここを使うぞ
Avatar
TachibanaKaoru 3/30/2018 10:27 AM
wiwi!
Avatar
わいわい
Avatar
SSIDとパスワードってどこにありますか??
Avatar
わいわい
Avatar
今渋谷でバスに乗った
Avatar
わいわい
Avatar
ライブ配信あります
Avatar
わいわい
Avatar
Naruki Chigira 3/30/2018 10:33 AM
わいわい
Avatar
わいわい
Avatar
配信チェック完了
👍 4
Avatar
配信あるんですね
10:35 AM
わいわい
Avatar
人権情報欲しい😇
Avatar
(Disclaimer: This is a post on my personal blog, not officially endorsed by Apple. It does not discuss any commitments to future plans, or…
Avatar
人権は与えました
😍 1
Avatar
配信助かります🙏
👍 1
Avatar
Youtubeなのでアーカイブもされます、最初のグダグダも残っちゃうけど開始時間は書いておきます。
11:05 AM
Optionalのサブタイピングは整合性が…取れないんだ…!
😭 2
11:08 AM
Optional崩壊についてはこちらのコメント欄をご参照ください
Avatar
Optionalのネストは大変だなー
11:10 AM
Kotlinだとnullableのネストがないから Any < Any? となって、Any?がtop typeとして綺麗に成立しているのかな
Avatar
ですね
Avatar
untagged union (annotationも)みたいなものであれば、サブタイピング扱いにしても崩壊はしない
11:11 AM
なのでObjective-Cのnullableはサブタイプで正解です
Avatar
@autoclosure の関数は @autoclosureじゃない関数のサブタイプになれるって書いてあるコメントをみつけた // An @autoclosure function type can be a subtype of a // non-@autoclosure function type. (edited)
Avatar
めっちゃ良い発表でした 🙌
Avatar
protocol Foo { associatedtype Bar func foo<T: HasB>(t: T) where T.B == Bar } protocol HasB { associatedtype B } struct C<E>: Foo { typealias Bar = [E] } この状態でCにfooを補完させると func foo<T>(t: T) where T : HasB, [E] == T.B { } というコンパイルの通らないコードが補完される
Avatar
Introduce a new Type node, BoundNameAliasType, which describes a reference to a typealias that requires substitutions to produce the underlying type. This new type node is used both for references ...
Fix a number of small issues with BoundNameAliasType to bring it up to parity with NameAliasType, so the former will be able to replace the latter. This includes: Making BoundNameAliasTypes profil...
11:21 AM
^これがomochimetaruさんが話してた件のPR
11:26 AM
なるほど・・・・・・
11:26 AM
CurPtr = BufferEnd 確かにこれいきなり出てきたらギョッとする
Avatar
休憩終わり
11:54 AM
Generic Animal Data Type
Avatar
iOSのDiscordで定期的にあがる話題として「protocol型の値がそのprotocol自身にconformしていないのはなぜ?」というものがあります。 例えば以下のようなコードです。 ```swift protocol An...
Avatar
generalized-existentialsの話ここかな swift/GenericsManifesto.md at master · apple/swift https://github.com/apple/swift/blob/master/docs/GenericsManifesto.md#generalized-existentials
swift - The Swift Programming Language
Avatar
ディスカッションぽくなってきて最高
Avatar
たのしいw
12:18 PM
4.1でも挙動変わってなさそう
12:23 PM
結局SR-6304はなぜ起きてるのかさっぱりわからんので解説して欲しい
12:23 PM
r06とか簡単な例で
Avatar
熱気がすごい(物理)
Avatar
あついw
Avatar
Kishikawa Katsumi 3/30/2018 12:48 PM
型システム入門の読書会が必要だな。
👍 8
👀 3
Avatar
Pを集合として表現していいなら、存在型の表記は { ∃X where X: P, X } より { ∃X ∈ P, X } のほうがいいかもなって思った
Avatar
ikesyoさんと飲みに行くので参加者募集です
Avatar
omochimetaru 3/30/2018 1:16 PM
あれ?うきたかさんときたさんはどこ
Avatar
★★★☆☆3.55 ■24Hコスパ良し☆北京ダックなど本格中華が300種。100円小皿がアツい。宴会¥1880〜 ■予算(夜):¥2,000~¥2,999
Avatar
omochimetaru 3/30/2018 1:21 PM
(ああ、片付けなどがあったのか。
Avatar
最初窮屈だと思いますが、突入しました。
Avatar
さーせん、別の花見予定があり離脱しました…!次回も参加します!!!
🙌 8
Avatar
発表ありがとうございました!
Avatar
Kishikawa Katsumi 3/30/2018 3:54 PM
@ukitaka おもしろかったです。勉強になりました。
Avatar
あざす、型システム入門読書会ぜひやってください 💪
4:59 PM
資料あげました!conpassの方にも資料載せたいけどなぜかエラーになってしまうので明日またトライしてみます
5:05 PM
(あ、できた)
Avatar
オブジェクトの生存期間を保証する関数みたいな話題が雑談であったと思うんですが、関数名何でしたっけ
Avatar
これだ!ありがとうございます
Avatar
どうせだったら bodyT を受けてくれたらいいのに・・・。
Avatar
便利すぎる
3:41 AM
便利すぎるというか、逆にこれは使わずに書いてて動いちゃってるのが怖いですね
Avatar
おお! < バリエーション
Avatar
使ってなくて怖いと思うコードの実例ってどんなのです?
Avatar
ある型がdeinitのタイミングでするタスクが有る、それがクロージャの実行結果に作用するケース、例えばRxSwiftのDisposeBagなんかはそれを踏みそうだと思います
3:51 AM
ちょうどメモリリークの検査を考えていて、クロージャの終了までは存在を保証したいというケースだったのでこれを使いました。
Avatar
なるほど。deinit に副作用がある場合は重要ですね。
Avatar
RxSwift, deinitの副作用結構沢山あって、(NSObjectのdeallocもハックしている)から、ちょっと気をつけないといけない気がする (edited)
👀 2
Avatar
ちなみに、あのとき話してた self.disposeBag = nil // その他処理... } みたいなときに、 deinit の発行が その他処理の「後」になることがあり得るか?という話に関しては、無いかなーと思っていますが、検証はしていません。 (edited)
Avatar
以前deinitが先、nillingで直ちに発生なのは実験して確かめました。でも暗黙的ですよね、あまり頼りたくない気持ちがある
7:20 AM
値型についてはendScopeで明示的に殺せるようになるかも。
7:21 AM
明示的なnil代入については、そもそもARCの採用(trace GCの不採用)が deterministic な解放処理のニーズも理由の一つだから
7:22 AM
さすがにそれが後になっちゃあいかんと思うけど、明示的な文書はみたことなし。
Avatar
omochimetaru 5/7/2018 3:14 AM
今日だ
Avatar
会場が静かでウケる。
Avatar
わいわい
Avatar
わいわいしてない
Avatar
わいわいしたかった(現地時刻午前3時)
Avatar
わいわい
Avatar
わいわい
Avatar
わいわい
Avatar
わいわい
Avatar
わいわい
Avatar
わいわい!
10:29 AM
🙌
🙌 6
Avatar
音乗ってない(^o^)
Avatar
小さいではなく?
10:31 AM
音声入りました。
10:32 AM
イベントチャンネルにもつなぎました
Avatar
@tarunon ボイスチャット何かやってるの?
Avatar
オンラインから質問どうぞ (edited)
Avatar
なるほど
Avatar
YouTubeのアドレスってTwitterとかに流しちゃっていいやつです?
Avatar
いいですよ
👏 1
Avatar
@swift-4.1.3 @swift-4.2.4 protocol P {} protocol Foo { var foo: Int { get } } extension Int: P {} extension Array: Foo where Element: P { var foo: Int { return count } } let a = [1,2,3] print(a is Foo) (edited)
Avatar
stderr:main.swift:12:9: warning: 'is' test is always true print(a is Foo) ^ warning: Swift runtime does not yet support dynamically querying conditional conformance ('Swift.Array<Swift.Int>': 'main.Foo') Could not cast value of type 'Swift.Array<Swift.Int>' (0x7f6f03a20240) to 'main.Foo' (0x7f6f03a20280). #0 0x0000000003f24d64 PrintStackTraceSignalHandler(void*) (/usr/bin/swift+0x3f24d64) #1 0x0000000003f250a6 SignalHandler(int) (/usr/bin/swift+0x3f250a6) #2 0x00007f6f07f2c390 __restore_rt (/lib/x86_64-linux-gnu/libpthread.so.0+0x11390) #3 0x00007f6f0666b428 gsignal (/lib/x86_64-linux-gnu/libc.so.6+0x35428) #4 0x00007f6f0666d02a abort (/lib/x86_64-linux-gnu/libc.so.6+0x3702a) #5 0x00007f6f038fbf13 (/usr/lib/swift/linux/libswiftCore.so+0x39df13) #6 0x00007f6f038f84d9 (/usr/lib/swift/linux/libswiftCore.so+0x39a4d9) #7 0x00007f6f038f852b (/usr/lib/swift/linux/libswiftCore.so+0x39a52b) #8 0x00007f6f038f9a78 _dynamicCastToExistential(swift::OpaqueValue*, swift::OpaqueValue*, swift::TargetMetadata<swift::InProcess> const*, swift::TargetExistentialTypeMetadata<swift::InProcess> const*, swift::DynamicCastFlags) (/usr/lib/swift/linux/libswiftCore.so+0x39ba78) #9 0x00007f6f0835b2ad #10 0x00007f6f0835b10e #11 0x0000000000fed1ce llvm::MCJIT::runFunction(llvm::Function*, llvm::ArrayRef<llvm::GenericValue>) (/usr/bin/swift+0xfed1ce) #12 0x0000000000ff1692 llvm::ExecutionEngine::runFunctionAsMain(llvm::Function*, std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > const&, char const* const*) (/usr/bin/swift+0xff1692) #13 0x00000000004d9076 swift::RunImmediately(swift::CompilerInstance&, std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > const&, swift::IRGenOptions&, swift::SILOptions const& (edited)
Avatar
truestderr:main.swift:12:9: warning: 'is' test is always true print(a is Foo) ^
Avatar
わいわい!
10:38 AM
@here わいわい!
10:39 AM
^ WebのPlaygroundもバージョン切り替えできるようにしました。 (edited)
10:41 AM
@swiftbot --version=4.0,4.0.2,4.0.3,4.1,4.1.1,2018-05-02-a protocol P {} protocol Foo { var foo: Int { get } } extension Int: P {} extension Array: Foo where Element: P { var foo: Int { return count } } let a = [1,2,3] print(a is Foo)
🛠 2
Avatar
swiftbot BOT 5/7/2018 10:41 AM
Author icon
kishikawakatsumi
protocol P {} protocol Foo { var foo: Int { get } } extension Int: P {} extension Array: Foo where Element: P { var foo: Int { return count } } let a = [1,2,3] print(a is Foo)
Version:
swift-4.0-RELEASE
Output:
Error:
/usercode/main.swift:7:1: error: extension of type 'Array' with constraints cannot have an inheritance clause extension Array: Foo where Element: P { ^ ~~~
Version:
swift-4.0.2-RELEASE
Output:
Error:
/usercode/main.swift:7:1: error: extension of type 'Array' with constraints cannot have an inheritance clause extension Array: Foo where Element: P { ^ ~~~
Version:
swift-4.0.3-RELEASE
Output:
Error:
/usercode/main.swift:7:1: error: extension of type 'Array' with constraints cannot have an inheritance clause extension Array: Foo where Element: P { ^ ~~~
Version:
swift-4.1-RELEASE
Output:
Error:
/usercode/main.swift:12:9: warning: 'is' test is always true print(a is Foo) ^ warning: Swift runtime does not yet support dynamically querying conditional conformance ('Swift.Array<Swift.Int>': 'main.Foo') Could not cast value of type 'Swift.Array<Swift.Int>' (0x7fc841935240) to 'main.Foo' (0x7fc841935280). /usr/bin/swift[0x3f24d54] /usr/bin/swift[0x3f25096] /lib/x86_64-linux-gnu/libpthread.so.0(+0x11390)[0x7fc845641390] /lib/x86_64-linux-gnu/libc.so.6(gsignal+0x38)[0x7fc843d80428] /lib/x86_64-linux-gnu/libc.so.6(abort+0x16a)[0x7fc843d8202a] /usr/lib/swift/linux/libswiftCore.so(+0x39df13)[0x7fc841810f13] /usr/lib/swift/linux/libswiftCore.so(+0x39a4d9)[0x7fc84180d4d9] /usr/lib/swift/linux/libswiftCore.so(+0x39a52b)[0x7fc84180d52b] /usr/lib/swift/linux/libswiftCore.so(+0x39ba78)[0x7fc84180ea78] [0x7fc845a702ad] [0x7fc845a7010e] /usr/bin/swift[0xfed1ce] /usr/bin/swift[0xff1692] /usr/bin/swift[0x4d9076] /usr/bin/swift[0x4c35d3] /usr/bin/swift[0x4beecc] /usr/bin/swift[0x4778c4] ...
Version:
swift-4.1.1-RELEASE
Output:
Error:
/usercode/main.swift:12:9: warning: 'is' test is always true print(a is Foo) ^ warning: Swift runtime does not yet support dynamically querying conditional conformance ('Swift.Array<Swift.Int>': 'main.Foo') Could not cast value of type 'Swift.Array<Swift.Int>' (0x7f2e73ecc240) to 'main.Foo' (0x7f2e73ecc280). /usr/bin/swift[0x3f24d64] /usr/bin/swift[0x3f250a6] /lib/x86_64-linux-gnu/libpthread.so.0(+0x11390)[0x7f2e77bd8390] /lib/x86_64-linux-gnu/libc.so.6(gsignal+0x38)[0x7f2e76317428] /lib/x86_64-linux-gnu/libc.so.6(abort+0x16a)[0x7f2e7631902a] /usr/lib/swift/linux/libswiftCore.so(+0x39df13)[0x7f2e73da7f13] /usr/lib/swift/linux/libswiftCore.so(+0x39a4d9)[0x7f2e73da44d9] /usr/lib/swift/linux/libswiftCore.so(+0x39a52b)[0x7f2e73da452b] /usr/lib/swift/linux/libswiftCore.so(+0x39ba78)[0x7f2e73da5a78] [0x7f2e780072ad] [0x7f2e7800710e] /usr/bin/swift[0xfed1ce] /usr/bin/swift[0xff1692] /usr/bin/swift[0x4d9076] /usr/bin/swift[0x4c35d3] /usr/bin/swift[0x4beecc] /usr/bin/swift[0x4778c4] ...
Version:
swift-4.2-DEVELOPMENT-SNAPSHOT-2018-05-02-a
Output:
true
Error:
/usercode/main.swift:12:9: warning: 'is' test is always true print(a is Foo) ^
10:41 AM
10:41 AM
10:41 AM
Author icon
kishikawakatsumi
protocol P {} protocol Foo { var foo: Int { get } } extension Int: P {} extension Array: Foo where Element: P { var foo: Int { return count } } let a = [1,2,3] print(a is Foo)
Version:
swift-4.2-DEVELOPMENT-SNAPSHOT-2018-05-02-a
Output:
true
Error:
/usercode/main.swift:12:9: warning: 'is' test is always true print(a is Foo) ^
10:42 AM
↑CondConfのバグ
Avatar
YouTubeありがてぇ
Avatar
where Key == Value やばそう
Avatar
Kishikawa Katsumi 5/7/2018 10:45 AM
@swiftbot --version=latest protocol A { static func foo() } extension Dictionary: A where Key == Value { static func foo() { print(type(of: self)) } } extension Array where Element: A { static func foo() { Element.foo() } } [String: String].foo() // Dictionary<String, String> [[String: String]].foo() // Dictionary<Dictionary<String, String>, Dictionary<String, String>>
🛠 1
Avatar
swiftbot BOT 5/7/2018 10:45 AM
Author icon
kishikawakatsumi
protocol A { static func foo() } extension Dictionary: A where Key == Value { static func foo() { print(type(of: self)) } } extension Array where Element: A { static func foo() { Element.foo() } } [String: String].foo() // Dictionary<String, String> [[String: String]].foo() // Dictionary<Dictionary<String, String>, Dictionary<String, String>>
Version:
swift-4.2-DEVELOPMENT-SNAPSHOT-2018-05-02-a
Output:
Dictionary<String, String>.Type Dictionary<String, String>.Type
Error:
Avatar
Kishikawa Katsumi 5/7/2018 10:45 AM
^ 直ってる?
Avatar
omochimetaru 5/7/2018 10:46 AM
治ってそう
Avatar
Youtuberでーす!!
📹 1
Avatar
いまSFOにいなかったっけ。
Avatar
現地時刻午前3時49分
Avatar
Avatar
知らなかった。べんり<Hashable
10:49 AM
知らなかったは嘘か、忘れてた。
Avatar
taketoさんのやつこれでしたっけ @swift-4.2.4 protocol A {} protocol B: A {} protocol C: A {} protocol D: B, C {} struct X<T>: A{} extension X: D where T == Int { // Type 'X<T>' does not conform to protocol 'B' }
👉 1
Avatar
stderr:main.swift:11:1: error: conditional conformance of type 'X<T>' to protocol 'D' does not imply conformance to inherited protocol 'B' extension X: D where T == Int { // Type 'X<T>' does not conform to protocol 'B' ^ main.swift:11:1: error: conditional conformance of type 'X<T>' to protocol 'D' does not imply conformance to inherited protocol 'C' extension X: D where T == Int { // Type 'X<T>' does not conform to protocol 'B' ^ main.swift:11:1: note: did you mean to explicitly state the conformance like 'extension X: C where ...'? extension X: D where T == Int { // Type 'X<T>' does not conform to protocol 'B' ^
Avatar
Swift 4.1 is now officially released! It contains updates to the core language, including more support for generics, new build options, as well as minor enhancements to Swift Package Manager and Foundation. There was also significant progress m...
Avatar
結構快適に視聴できてて助かる
Avatar
結局 import PlaygroundSupport するのはPlaygroundBookでしかできない? 🤔 Linked Frameworks からaddするのかと思ったらそれもできないし
Avatar
Kishikawa Katsumi 5/7/2018 11:33 AM
iOS-Runtime-Headers - iOS Objective-C headers as derived from runtime introspection
Avatar
まちがったw
😾 2
Avatar
まちがったんかい
Avatar
youtubeの音声が若干ハウってて色々試してたんよw
Avatar
maji
Avatar
あ、治った
Avatar
@objc protocol Foo { optional func aaa() }
Avatar
swift/DeclNodes.def at e57467a56345ea47f5c5d6895dcbb5785aad17ca · apple/swift https://github.com/apple/swift/blob/e57467a56345ea47f5c5d6895dcbb5785aad17ca/include/swift/AST/DeclNodes.def 頻出パターン
swift - The Swift Programming Language
Avatar
attributeとかもこのパターンで定義されてるっぽい https://github.com/apple/swift/blob/master/include/swift/AST/Attr.def
swift - The Swift Programming Language
Avatar
概要 moaible-swift-memo.hateblo.jp コマンド生成 - モードによる分岐終了まで フラグ一覧 参考: swift-clang/Options.td at ba3b1c672105db284b1e425d4ab7cdc8411f29a3 · apple/swift-clang · GitHub Swift関連で追加してる...
Avatar
遠くからでも来やすいように👀 @ukitaka
12:35 PM
配信ありがとうございました!!!
Avatar
音声うまくいってなかったかも、すみません(´・ω・`)
Avatar
Kishikawa Katsumi 5/7/2018 12:35 PM
@d_date 寝ないでKeynoteですか?
Avatar
いや、概ね大丈夫だったよ @Kishikawa Katsumi 今日はまだ7日の朝で、バッジのピックアップがあるだけです。
12:36 PM
本編は8日から
Avatar
Kishikawa Katsumi 5/7/2018 12:36 PM
あ、そうなんですね。ということは日本だとあしたの深夜?
Avatar
28時間後だから、あしたの深夜かな?
Avatar
次回のわいわいswiftc #3は6/22の予定
Avatar
Kishikawa Katsumi 6/12/2018 3:24 AM
https://twitter.com/soutaro/status/1006245582321606656 カジュアルな「型システム入門」話をしてもらうのどうですかね?松本さんは専門家なのでバックグラウンドは保証します。今Rubyに型アノテーション付けるSteep作ってる人。元同僚。
こんな感じの、一回試しにやってみたいので、30分とか話させてくれる会があったら教えてほしいと思っています。 https://t.co/8IRFjR1ERM
Avatar
omochimetaru 6/12/2018 3:26 AM
聞きたい!
Avatar
おおお、聞きたい・・・。録画があるとてもうれしいです。
Avatar
Kishikawa Katsumi 6/12/2018 3:32 AM
来週のやつに誘ってみます。
Avatar
めっちゃ聞きたい
Avatar
ありがとうございます!楽しみです
Avatar
omochimetaru 6/17/2018 2:19 PM
@kitasuke 金曜日のやつ、何点か小ネタを話そうと思います 時間見積もれてないけど15〜30分ぐらいかな
Avatar
ありがとうございます!お願いします!
Avatar
omochimetaru 6/20/2018 4:25 PM
LT3つのつもりだったんだけど、2つめのスライド、話題がswiftcに入る時点ですでにP17になっている😲
Avatar
時間が足りなかったら飲みながら話せば良いんですよ
Avatar
omochimetaru 6/21/2018 2:40 AM
タイムテーブル自体はよく見るとめちゃくちゃ余裕あるな
Avatar
雑に更新しました!
Avatar
omochimetaru 6/21/2018 3:03 AM
ども〜
Avatar
omochimetaru 6/21/2018 4:22 AM
@kitasuke もう前日だけど、松本さんの発表者紹介を書きませんか?
Avatar
そうですね
4:25 AM
@Kishikawa Katsumi 松本さんが他の勉強会等で使っている自己紹介はご存知ですか?もしあるならそれを許可もらって使うのが良いですかね
Avatar
Kishikawa Katsumi 6/21/2018 4:25 AM
@kitasuke 聞いてみますね。サッと送ってくれる気がします。
Avatar
ありがとうございます!
4:28 AM
@omochimetaru おもちさんも発表者紹介のせますか?
Avatar
omochimetaru 6/21/2018 4:39 AM
そうですね。「最近の趣味はゲームとswiftコンパイラいじり」でお願いします タイトルは swiftcのデバッグ方法 IRGenからみたType Metadata swiftcのマングリングとSubstitution の3つで。
👍 1
Avatar
Kishikawa Katsumi 6/21/2018 5:48 AM
@kitasuke https://rubykaigi.org/2018/presentations/soutaro.html#jun01 RubiKaigiのやつです。SideCIは名前がSiderに変わっているので、それだけ変えてください。
Avatar
ありがとうございます!
6:23 AM
# わいわいswiftc わいわいswiftcは、Swift Compilerとその周辺技術に関する勉強会です。初心者・上級者を問わず、情報交換とディスカッションの場として機能することを目的としています。 swiftcとはSwift Compile...
👏 1
10:29 AM
配信はじめました
10:29 AM
eventの音声チャンネルでリアルタイム音声も配信してます
Avatar
わいわい
😛 1
Avatar
YouTube勢です。
swift 5
Avatar
Siderは、GitHubに対応したコードレビュー自動化サービスです。静的解析ツールを使ってプルリクエストをチェックし、自動的にプログラムの問題を検出、日本語で指摘します。Ruby, PHP, JavaScript, CSS, Java, Python...
Avatar
配信ありがたい
Avatar
会場の方々の声は配信されてないのかな?
Avatar
マイクを通さないと音声が配信できないです申し訳ない😿
Avatar
なるほどー。
Avatar
ミキサーとか準備して会場音声拾えるようにしたいな
10:56 AM
会場から大量のマサカリがw
10:58 AM
・Swiftのasは as?もあるよ。 ・if letと組み合わせて使えるよ。 ・ObjCはランタイムになんでもできるよ。実行時に型を作ることもできる。 ・Swiftのasはテスト以外もできるよ。structからclass(StringからNSString)、TからT?への変換が代表的だよ。
🙏 3
10:59 AM
拾いきれない🤕
Avatar
えっ。 let a: [String] = [] let b: [Int] = a as! [Int] (edited)
11:02 AM
これは実行時には大丈夫なのか。(実行時にはワンチャスキャストできるのか)
Avatar
実行時大丈夫であるべき警告がおかしい 😄 実行時クラッシュするべき警告は正しい 😠 どちらでもいい/わからない/考え中 🤔 (edited)
😄 2
😠 4
Avatar
あーなるほどね。
Avatar
理論上最強...rustかな...
11:14 AM
ト印w
Avatar
LaTeXでは \vdash で入力するので研究者はブイダッシュといったり、あるいは imply と読んでいるひともいたような。
😮 1
Avatar
面白い。配信ありがとうございますー😃
🙌 1
Avatar

はじめに

ScalaはJavaと違って共変・反変が定義できるため、型パラメータの取り扱いが一段と複雑になっている(なおJavaでは配列のみ共変の振る舞い)。 Scaladocを読んでは[+A]、[-B]、[A1 >: A]、[B1...
Avatar
面白いです!ほんとにわいわいしてるw
Avatar
@escaping/@noescape はオーバーロードできる?
11:21 AM
@swiftbot func a(_ f: @escaping () -> ()) { } func a(_ f: () -> ()) { }
🛠 1
Avatar
Author icon
tarunon
func a(_ f: @escaping () -> ()) { } func a(_ f: () -> ()) { }
Version:
swift-4.1.1-RELEASE
Output:
Error:
/usercode/main.swift:2:6: error: invalid redeclaration of 'a' func a(_ f: () -> ()) { } ^ /usercode/main.swift:1:6: note: 'a' previously declared here func a(_ f: @escaping () -> ()) { } ^
Avatar
グオオ
Avatar
@escapingの挙動よくわからん 🤔
11:25 AM
サブタイプと言えるのかな
Avatar
swiftはoptional protocolって作れないでしたっけ
Avatar
@objc をつけると作れる
Avatar
ProtocolのOptionaメソッド?
Avatar
(前回のwaiwaiで知ったw
Avatar
あーそうでした。
Avatar
"kind of constraint" と subtypingってどう違うんですっけ…
Avatar
default implを空でextensionに実装しちゃう手段もある
Avatar
おぉなるほど。
Avatar
Swiftではextensionが推奨で
11:26 AM
Optional methodはObjective-Cとの互換のため以外には使わない方が良いですね
11:26 AM
なんか??みたいな変な型になる
Avatar
optional var window: UIWindow? < こんにちは
Avatar
swift - The Swift Programming Language
Avatar
ついに会場に静止がw
Avatar
protocol A {} class B: A{} class C: A{} vs enum A { case b(B) case c(C) }
Avatar
Scalaは継承で定義するという選択をしてますね
Avatar
Scalaはシールドクラスがありますね(綴りに自信がないのでカタカナを使う)
Avatar
Scala だと seald class で網羅性検査ができるっていう解決法になっていて性質としては ADT なんですよね
Avatar
Kotlinもsealedできる
Avatar
KotlinはScalaの子供だから…
Avatar
なるほど
Avatar
(全く同じこと書こうとしていたけど怒られが発生しそうなので黙っていた)
Avatar
Union Typesというとタグ無しのほうの話かと思ったけどタグありの話が展開されている
Avatar
なんか、昔kotlinのドキュメントにそういう感じのこと書いてあったけどある日突然消えた気がする…
Avatar
C は Union だとタグ無しですもんねぇ
Avatar
おっ。。。Optionalかな。。。
11:50 AM
Kotlinのは型というよりアノテーションぽい
11:52 AM
難しい話をしたはずの登壇者が一番疲れてる…
Avatar
難しい話をした人がつかれるのはそれはそうでは
Avatar
会場からのマサカリの数が
😇 1
Avatar
Kishikawa Katsumi 6/22/2018 11:53 AM
別に斧は飛んでなかったと思いますよ。
Avatar
swiftのnullableの型理論の側面からの話を聞きたい
Avatar
マサカリにマイナスイメージはあんまりもってないです。語弊がありました 🙇
Avatar
Kishikawa Katsumi 6/22/2018 11:54 AM
細かいツッコミ失礼しました🙇
Avatar
ダックタイピングというのは「偶然辻褄があっている状態」のことですからね
Avatar
「ただのダック」🦆
Avatar
そういえば @koher さんが前に、enumがnominalなのは嫌だって言ってたんですが、untagged unionが欲しいという話だったんだなあと合点がいきました https://twitter.com/koher/status/888960280490721280 (edited)
@takasek non-nominal的なものがほしいのを、nominalな汎用な型で代替してる点ですね。 #swtws
Avatar
@swiftbot class A { func hoge(a: Sub) -> Sub { return Sub() } } class B: A { override func hoge(a: Super) -> SubSub { return SubSub() } } class Super {} class Sub: Super {} class SubSub: Sub {} (edited)
🛠 1
Avatar
(edited)
Author icon
Biacco42
class A { func hoge(a: Sub) -> Sub { return Sub() } } class B: A { override func hoge(a: Super) -> SubSub { return SubSub() } } class Super {} class Sub: Super {} class SubSub: Sub {}
Version:
swift-4.1.1-RELEASE
Output:
Error:
Avatar
このproposalが通れば具体型でSelfが使えるようになる https://github.com/apple/swift-evolution/blob/master/proposals/0068-universal-self.md
swift-evolution - This maintains proposals for changes and user-visible enhancements to the Swift Programming Language.
Avatar
なんで返り値 AnyString のときダメなんです??
Avatar
引数Selfは壊れるけど、中でSelfはしばしば使いたくなりますね
Avatar
Self で static 呼びたくて呼べなくて震えてる
Avatar
protocol Myself {} extension Myself { var `Self`: Self.Type { return type(of: self) } static var `Self`: Self.Type { return self } } class Foo: Myself { func bar() { Self.hoge() } static func baz() { Self.hoge() } static func hoge() { print("called") } } 今でもこういうことはできると聞きました
👀 3
Avatar
おもちくんの発表時間は残ってなさそうですね👻
Avatar
4倍速で話すか
Avatar
誰も理解できなくなるw
Avatar
めちゃめちゃ勉強になりました!
swift 2
12:22 PM
実行時にコンパイルが走るけどコンパイル時型検査がなくて実行時に型チェックするPHPが変な言語だということがよくわかりました。
🤔 1
Avatar
動的言語と静的言語は向き不向き流行り廃りがあるので、ここにいる人たちは静的言語が向いている分野で戦っているのでちょっと動的言語に対して風当たりは強くなっちゃいますね。。。
👌 1
12:24 PM
私も含めて。
Avatar
PHPはもともとインタプリタとして開発されて、その後(主にパフォーマンスの理由で)バイトコードにコンパイルする実装が出てきたという認識で、静的型検査はその頃眼中になかったんじゃないですかね
Avatar
Advanced Debugging with Xcode and LLDB;https://developer.apple.com/videos/play/wwdc2018/412/
Discover advanced techniques, and tips and tricks for enhancing your Xcode debugging workflows. Learn how to take advantage of LLDB and...
🙏 2
Avatar
ガチLTだ
12:49 PM
よめねえw (edited)
Avatar
Substitutionすごい
Avatar
そろそろ配信終わります。お疲れ様でした。
Avatar
1/10倍速で聞きたい
Avatar
良かった😃 🙌
Avatar
Youtube配信は後ほど自動でアーカイブされます
Avatar
おつです
Avatar
別のことをしていてすっかり遅刻してしまいましたが、いちおうScalaを業務で書いているマンとしてちょっとenum vs protocol をやっていきたいと思います。 protocol A {} class B: A{} class C: A{} vs enum A { case b(B) case c(C) }
👀 1
4:11 PM
この2つですが、もしかして会場では答えでている可能性あって、そうしたら申し訳ないんですが、まさに上の方で議論されているようにSwiftにはsealdがないので、protocolを利用した上の例では、予想しないような実装(クラス・構造体)が作られる恐れがあり、またパターンマッチで網羅性を検査することができません。
4:12 PM
じゃあ、下のenumがいいのか、という議論になるかというとそうではなくて、(勘違いだったら申し訳ないんですが)Swiftのenumの各タグ(?、たとえば上記の例でいうaとかb)はたしか型パラメーターが取れないです。
👉 1
4:13 PM
だから、たとえば型レベルリスト(HList)のようなデータ構造を作りたいときは、パターンマッチの網羅性を犠牲にしてでも前者のprotocolをつかって次のようにやるしかない、といった感じになるんじゃないでしょうか。 public protocol HList { } public struct HNil: HList { init() { } } public struct HCons<H, T: HList>: HList { public let head: H public let tail: T public init(_ h: H, _ t: T) { self.head = h self.tail = t } }
4:13 PM
この例ではタグ(?)としてHNilHConsがありますが、HConsが型パラを取るので、こうしています。
Avatar
@omochimetaru 前に作ってたswiftでなんちゃってsealedはこの問題解決できますか
Avatar
ほほー。そんなテクがあるのか……?
Avatar
うろ覚えですが、protocolの中にinnerなenumを返す箇所を定義してそれをoverrideでselfをラップして返すことで網羅性を担保しつつ…みたいな雰囲気だった記憶
Avatar
なるほどー。(ちょっと考えてみよう)
Avatar
overrideじゃなくて実装で、ですね。innertypeはprotocolには定義できないから別個だ
Avatar
omochimetaru 6/22/2018 4:22 PM
とりあえず、なんちゃってsealedでは対応できない。 あれはありえるサブクラスを全部定義したenumを別途用意するテクニックだけど
4:22 PM
この場合だとHNil, HList<Int, HNil>, HList<Int, HList<Int, HNil>>... ってありえる型が無限通りあるから。
Avatar
caseが無限個になっちゃうわけか
Avatar
omochimetaru 6/22/2018 4:23 PM
うん。でもそもそもこのケースって、Scalaであっても、
4:23 PM
サブクラスに関して網羅はできないのでは・・・?
4:24 PM
それともSwiftにおいてenumでやるかprotocol準拠でやるかという判断において、enumだとだめなケースについて例示している?
4:25 PM
List<A> (要素の型が全部同じ)ならできるけど、
4:26 PM
HListだと要素の型と要素数がハードコードされててenumにできないっていうのは面白い指摘ですね
Avatar
はい。enumだと各タグ(?)は型パラメーターが取れないから、enumではできそうにない、という例として使いました。 (edited)
Avatar
ワンチャンあるかも
4:28 PM
ネストした個数で要素数を表現できれば、いけそうな気がしてきました
Avatar
omochimetaru 6/22/2018 4:28 PM
あー・・・
Avatar
末尾は型パラVoidで
Avatar
omochimetaru 6/22/2018 4:29 PM
そうか、ちょいまってて
Avatar
おっ。
Avatar
indirectを捨てたList<T>の再発明で動く予感はしています
Avatar
omochimetaru 6/22/2018 4:30 PM
enum HList0 { case `nil` } enum HList1<T1> { case `nil` case list0(HList0) } enum HList2<T1, T2> { case `nil` case list1(HList1<T2>) } enum HList3<T1, T2, T3> { case `nil` case list2(HList2<T3, T3>) }
Avatar
@omochimetaru
Scalaであっても、サブクラスに関して網羅はできないのでは
sealed で各クラスが final だと(デフォルトで final ?)サブクラスを後で足せないのでは?
Avatar
@omochimetaru それ再帰的に定義できない?
Avatar
omochimetaru 6/22/2018 4:31 PM
@koher HListの場合の話です。サブクラスの数が無限にある。
Avatar
型パラはTとNextで末尾ならNext=Void
Avatar
HConsHNil の二つがあればいいんじゃない?
Avatar
omochimetaru 6/22/2018 4:31 PM
いや、それはそうなんですが、
4:32 PM
HConsが型パラをまた再帰的に取るから
4:32 PM
HConsの型パラを埋めきったコンクリートな型を
4:32 PM
網羅的に列挙できないと思って。
4:32 PM
HConsであることだけでは型として完成しないから意味がないような気がします。
4:33 PM
@tarunon あれ、それだけかな?
Avatar
私の直感は其れと囁いてるけど、私の理解が間違ってるかも
Avatar
https://qiita.com/yyu/items/e8f1b4a17dac4f9108a5 public protocol HList { } public struct HNil: HList { init() { } } public struct HCons<H, T: HList>: HList { public let head: H public let tail: T public init(_ h: H, _ t: T) { self.head = h self.tail = t } }
Avatar
omochimetaru 6/22/2018 4:34 PM
@tarunon Tが Cons or Nil であることはどう制約する?
Avatar
そこの制約がいるのか、そして未知の型から列挙にできなくなる、と
Avatar
おっと、流用元がばれてしまったw
Avatar
この間流れてたからタイムリーな気はするw
Avatar
omochimetaru 6/22/2018 4:38 PM
なんかなんちゃって化ができるような気もするな・・・
Avatar
後一枚足りない
Avatar
@omochimetaru sealed があれば↓で限定できてない? // Kotlin sealed class HList { class HNil: HList() class HCons<H, T: HList>(val head: H, val tail: T): HList() }
Avatar
omochimetaru 6/22/2018 4:39 PM
@koher それ、実際にswitch caseなりでダウンキャストができないのでは?ってことです。
Avatar
この場合のHListって、TがHConsの場合にその中のHを限定する必要は無いんですか?、
Avatar
実際にswitch caseなりでダウンキャストができないのでは?
うーん、 Kotlin だとパターンマッチがないからできない気がするけど、パターンマッチがあれば型を明記しなくても headtail にマッチングできないかな?
Avatar
omochimetaru 6/22/2018 4:42 PM
[Int, String, Int] みたいなリストから、一個ずつ型安全に取り出せるのがHListの旨味ですよね? (edited)
Avatar
@tarunon
TがHConsの場合にその中のHを限定する必要は無いんですか?
あると思います。
Avatar
[Int, String, Int] みたいなリストを、一個ずつ型安全に取り出せるのがHListの旨味ですよね?
そうです!
Avatar
じゃあ必ずしも同じである必要はないし、むしろ逆
Avatar
たとえば HCons<Int, HCons<String, HCons<Bool, HNil>>> とは、先頭の値の型が Int であり、かつ2番目の値の型が String であり、そして3番目の値の型が Bool であることを示している。
Avatar
omochimetaru 6/22/2018 4:43 PM
だから、 > 型を明記しなくても Hの型を明記しない形で取り出しても、そもそも旨味がなくなってしまう。
Avatar
任意のHList型からswitchのパターンマッチは、まあそもそもの型の定義的に無限通りになるから無理なので (edited)
4:46 PM
switchでうれしい場面が見えなくなってきてしまった
Avatar
パターンマッチが網羅される、とはどういうことか?についてちょっと整理しましょう。わかりやすい部分として、普通のリストを考えますが switch list { case let .Cons(v): ??? case let .Nil: ??? } みたいな ☝ な例は、どんなリストに対しても「どのパターンに行けばいいか決定できない」というケースがないので網羅しています。
4:48 PM
ところが、 switch list { case let .Cons(v): ??? case let .Cons(.Cons(v)): ??? }
4:48 PM
これは網羅できてないですね。
4:49 PM
これと全く同じことが、HLIstでもできてほしいんです。
Avatar
omochimetaru 6/22/2018 4:49 PM
protocol HListProtocol { associatedtype HeadType associatedtype ConsType: HListProtocol func asEnum() -> EHList<HeadType, ConsType> } indirect enum EHList<H, L: HListProtocol> { case `nil` case cons(H, EHList<L.HeadType, L.ConsType>) }
4:49 PM
↑できたかも? (edited)
Avatar
switch hlist { // たとえばhlistの型は HCons<Int, HCons<String, HCons<Bool, HNil>>> だとする。これはコンパイラなら知ってるぞ case let .HCons(v): ??? // 当然 :point_up: の先頭の型は Int だから、vはIntだぞ case let .HNil: ??? }
4:51 PM
ほほー。
Avatar
omochimetaru 6/22/2018 4:51 PM
あ、だめっぽい、nilのほうが終端しない・・・
Avatar
ところで、HListならまあ、どうにかJavaでもできそうなんですけど、
4:52 PM
じゃあ、2つのHListの値があったとき、それらをアペンドする関数をかけるか?というのは実はSwiftとかじゃないとキビしいと思います。
4:53 PM
(ちょっと話がながくなりすぎたかなw)
Avatar
omochimetaru 6/22/2018 4:54 PM
Javaだとappendが厳しいというのはどういうことですか?
Avatar
直感だとJavaでもSwiftでも変わらなさそうな?
Avatar
omochimetaru 6/22/2018 4:55 PM
Swiftのstructでの実装の場合であっても、nilとconsの網羅したフローを書きそこねる可能性はあるので同じ気がします。
Avatar
HCons<Int, HCons<String, HCons<Bool, HNil>>>HCons<Int, HCons<String, HCons<Bool, HNil>>>があったら、アペンドするとHCons<Int, HCons<String, HCons<Bool, HCons<Int, HCons<String, HCons<Bool, HNil>>>>>>という型が帰ってくる関数です。
4:56 PM
(僕もSwiftで実装してみよ)(実はみきり発射) (edited)
Avatar
omochimetaru 6/22/2018 4:57 PM
ああ、それがgeneric functionのシグネチャとして表記できるか、ということですね。
Avatar
そうです!
Avatar
omochimetaru 6/22/2018 4:58 PM
型パラメータ操作の再帰的処理が必要でできない気がする・・・
Avatar
今 Java で書いててそこで詰まったけど、 Swift でもできなさそうな?
Avatar
あっ。 (edited)
5:02 PM
あー。わすれてた、extensionが型パラメーター取れないんだった!
Avatar
お、 Parameterized Extension は最近話題の裏技が。
5:03 PM
extension Optional { func flatten<T>() -> T? where Wrapped == T? { return flatMap { $0 } } }
5:04 PM
↑で↓相当のことができます。 extension<T> Optional where Wrapped == T? { func flatten() -> T? { return flatMap { $0 } } }
Avatar
うーん、無理でした……。
5:14 PM
(Scalaだとこういうのでできたりするんですが……) https://qiita.com/yyu/items/4941417ec555ea5ab590#%E5%AE%9F%E8%A3%85
色々な型の値をまとめて扱う際にはタプルを用いるが、Scalaのタプルは22個までしか値を入れることができない。もし23個の値を持つタプルが必要な場合は自力でそういうデータ型を作るしかない。しか...
5:15 PM
extensionで型パラ取らせてくれー🙏
Avatar
omochimetaru 6/22/2018 5:15 PM
↑上記の裏技でもだめですか?
Avatar
そうですね……。protocolでassosicatedtypeしているので、関数の中というよりは、extensionの中ですぐ必要な感じです。
5:17 PM
public protocol HAppend { associatedtype A: HList associatedtype B: HList associatedtype C: HList static func append(_ hl1: A, _ hl2: B) -> C } extension<D: HList> HAppend { typealias A = HNil typealias B = D typealias C = D static func append(_ hl1: Nil, _ hl2: D) -> D = hl2 } (edited)
5:17 PM
こんなイメージ(?)。
Avatar
omochimetaru 6/22/2018 5:18 PM
ふむふむ・・・
Avatar
(この記事では型レベル自然数Natを作って、それつかってHLIstにアクセスしているけど、同様にこういうのもつくれない……)
Avatar
yutailang0119 7/12/2018 6:51 AM</