SlideShare a Scribd company logo
1 of 53
Download to read offline
SwiftでObjective-C
コードに立ち向かう
@toshi0383
今日話すこと
• Objective-CとSwiftの互換開発入門(てきとう
• Advanced Objective-CとSwiftの互換開発
Objective-CにSwiftを混
ぜるときに気をつけること
きほん
• https://developer.apple.com/library/ios/
documentation/Swift/Conceptual/
BuildingCocoaApps/MixandMatch.html
簡単っぽい
やってみた
ハマったこと
• Bridging Headerがたくさんできた。。
• objcで書いた単体テストからSwiftクラスが見えない?
• objc側で.hで#defineした定数、マクロが見えない?
• objcからCommand + Clickで宣言部にジャンプすると、
{Product}-Swift.h に飛んで、実装が見えない。
BridgingHeaderのファイル名
にはターゲット名が使われる
自動生成してみると。。
Bridging Headerがたくさん
できた。。
• うげ。
• ターゲット分できている。
• 一つずつ消してひとつに

まとめて、解決
• もしくは、ターゲット一つにするとか
objcで書いた単体テストから
Swiftクラスが見えない?
• これは、
• これが正しい。
• よくみるとちゃんと設定されていた。
objcで書いた単体テストから
Swiftクラスが見えない?
• それだけではだめだった。
• public…。
• ※Swift2で@Testableを使えばpublicにしなくてよくなり
ました。
SwiftもXcodeももう
ちょっとがんばってほしい
objcからCommand + Clickで宣
言部にジャンプすると、{Product}-
Swift.h に飛んで、実装が見えない。
もうちょっとがん
ばってほしい
objc側で.hで#defineした
定数、マクロが見えない?
Bridging-Headerでimportすれ
ば#defineで定義した値も見えた
• ※会場で実演してくださった@akio0911 さんあり
がとうございます!
きほんのまとめ
• ちゃんと設定すれば、シームレスな連携ができる
• {Module}-Swift.hは自動生成です。
• テストケースはテストするクラスと同じ言語で書い
た方がラク。
• Appleもうちょっとがんばってほしい
参考
• Using Swift with Cocoa and Objective-C

https://developer.apple.com/library/ios/
documentation/Swift/Conceptual/
BuildingCocoaApps/MixandMatch.html
• Swift and Objective-C Interoperability

https://developer.apple.com/videos/wwdc/
2015/?id=401
• Objective-CプロジェクトにSwift mix してハマったこ
と(随時更新)

http://qiita.com/toshi0383/items/
063205e0d188e9ef6e1d
ここからは、設計の話
とある要件
• SNSシェア機能を音楽詳細画面と動画詳細画面に
追加する
• UIActivityViewControllerを使用
とある要件
• SNSシェア機能を音楽詳細画面と動画詳細画面に
追加する
• UIActivityViewControllerを使用
ベース詳細画面クラス
ここに共通実装を追加する?
とある要件
• SNSシェア機能を音楽詳細画面と動画詳細画面に
追加する
• UIActivityViewControllerを使用
ベース詳細画面クラス
ここに共通実装を追加する?
ダウンロード詳細画面
動画モデル音楽モデル
ベースクラスの問題点
• いろんな処理が1箇所にまとまって混沌とする
• 継承するけどすべてのメソッドが使われるわけでは
ない。=>影響範囲が読めない
• 微妙に実装を変える必要があるところは結局子クラ
スのファイルに書かれることになり、子クラスも混
沌としてくる
そこで
Swift
protocol extension
protocol extension
• protocolに対してデフォルト実装を持たせられる
つまり
こうするとハッピーになれそう
• SNSシェア機能を音楽詳細画面と動画詳細画面に
追加する
protocol SNSShareable
ここに共通実装を追加する
extension SNSShareable
理想はこんなかんじ?
SNSShareable
PlaylistManagarableClippable
動画詳細VC 音楽詳細VC ダウンロードリストVC
TableEditable
ベースクラス実装と比べてい
いところ
• protocolを見ればなにをしているかわかる
• 後から別の画面にもSNSシェア機能を追加したい
場合も、protocolに適用するだけで共通実装が得
られる
Swiftつよい
あれ
• SNSシェア機能を音楽詳細画面と動画詳細画面に
追加する
protocol SNSShareable
ここに共通実装を追加する
extension SNSShareable
• SNSシェア機能を音楽詳細画面と動画詳細画面に
追加する
protocol SNSShareable
ここに共通実装を追加する
extension SNSShareable
Objective-CObjective-C
Objective-Cのクラスに
protocolって使えるんだっ
け
@objcをつければ
• 使えます。
Objective-Cのクラスに
protocol extensionって使
えるんだっけ
あ。。
使えませんでした
結果
こうなった
• SNSシェア機能を音楽詳細画面と動画詳細画面に
追加する
protocol SNSShareable
ここにそれぞれ共通
実装を追加
extension 音楽詳細画面
extension 動画詳細画面
これが限界かな。。
実際の構成
• SNS機能.swift を作成
• その中にprotocolとextensionを両方まとめて定
義。
• 処理をまとめたいときは、private なfree function
を作ることで対応
まとめ
• Obj-Cと互換すると、Swiftの良さは生かし切れな
い
• いっそ全部書き換えちゃったほうが幸せかも
• 書き換えなくても、extensionで拡張する方法だと
Swiftを味見できるという点ではよい
• 機能ごとにprotocolとその実装を同じファイルにま
とめると、その機能の見通しが良かった
問題発生!
現在の納品手順
開発用.xcodeproj
StaticLibrary作成用.xcodeproj
納品用.xcodeproj
ソースコードコピー
リソースコピー
ビルド
StaticLibrary.aコピー
zipに
固めて
納品
現在の納品手順
開発用.xcodeproj
StaticLibrary作成用.xcodeproj
納品用.xcodeproj
ソースコードコピー
リソースコピー
ビルド
StaticLibrary.aコピー
zipに
固めて
納品
Swiftは .a にできない
つまり
Swift使えないじゃん。。
絶賛交渉中
(ダメだったら来週Objective-C
で書き直すことになる)
最後モヤッとしますが、
以上です。
Q&A

More Related Content

What's hot

Visual Studioで始めるTypeScript開発入門
Visual Studioで始めるTypeScript開発入門Visual Studioで始めるTypeScript開発入門
Visual Studioで始めるTypeScript開発入門Narami Kiyokura
 
Visual C++ 2015の紹介(C++11/14的に)
Visual C++ 2015の紹介(C++11/14的に)Visual C++ 2015の紹介(C++11/14的に)
Visual C++ 2015の紹介(C++11/14的に)egtra
 
.NET Core と .NET Framework (続きは de:code 2016 で!)
.NET Core と .NET Framework (続きは de:code 2016 で!).NET Core と .NET Framework (続きは de:code 2016 で!)
.NET Core と .NET Framework (続きは de:code 2016 で!)Akira Inoue
 
Visual Studio Codeで始めるTypeScript
Visual Studio Codeで始めるTypeScriptVisual Studio Codeで始めるTypeScript
Visual Studio Codeで始めるTypeScriptAkira Inoue
 
20160308 私とVisual Studio
20160308 私とVisual Studio20160308 私とVisual Studio
20160308 私とVisual StudioTakayoshi Tanaka
 
TypeScript と Visual Studio Code
TypeScript と Visual Studio CodeTypeScript と Visual Studio Code
TypeScript と Visual Studio CodeAkira Inoue
 
エクストリームC++11/14プログラミング
エクストリームC++11/14プログラミングエクストリームC++11/14プログラミング
エクストリームC++11/14プログラミングegtra
 

What's hot (7)

Visual Studioで始めるTypeScript開発入門
Visual Studioで始めるTypeScript開発入門Visual Studioで始めるTypeScript開発入門
Visual Studioで始めるTypeScript開発入門
 
Visual C++ 2015の紹介(C++11/14的に)
Visual C++ 2015の紹介(C++11/14的に)Visual C++ 2015の紹介(C++11/14的に)
Visual C++ 2015の紹介(C++11/14的に)
 
.NET Core と .NET Framework (続きは de:code 2016 で!)
.NET Core と .NET Framework (続きは de:code 2016 で!).NET Core と .NET Framework (続きは de:code 2016 で!)
.NET Core と .NET Framework (続きは de:code 2016 で!)
 
Visual Studio Codeで始めるTypeScript
Visual Studio Codeで始めるTypeScriptVisual Studio Codeで始めるTypeScript
Visual Studio Codeで始めるTypeScript
 
20160308 私とVisual Studio
20160308 私とVisual Studio20160308 私とVisual Studio
20160308 私とVisual Studio
 
TypeScript と Visual Studio Code
TypeScript と Visual Studio CodeTypeScript と Visual Studio Code
TypeScript と Visual Studio Code
 
エクストリームC++11/14プログラミング
エクストリームC++11/14プログラミングエクストリームC++11/14プログラミング
エクストリームC++11/14プログラミング
 

Similar to SwiftでObjective-Cコードに立ち向かう

Nullabilityについて
NullabilityについてNullabilityについて
Nullabilityについてishikawa akira
 
Objective-Cプログラマのためのswift導入法
Objective-Cプログラマのためのswift導入法Objective-Cプログラマのためのswift導入法
Objective-Cプログラマのためのswift導入法Tomoki Hasegawa
 
Microsoft DevOps Hackathon (Sep 2015) Team 4 Presentation
Microsoft DevOps Hackathon (Sep 2015) Team 4 PresentationMicrosoft DevOps Hackathon (Sep 2015) Team 4 Presentation
Microsoft DevOps Hackathon (Sep 2015) Team 4 PresentationYuichiro Saito
 
Objective-C/Swift コードの共用
Objective-C/Swift コードの共用Objective-C/Swift コードの共用
Objective-C/Swift コードの共用Yoichiro Sakurai
 
090821 Ruby Sapporo Night Ruby Cocoa
090821 Ruby Sapporo Night Ruby Cocoa090821 Ruby Sapporo Night Ruby Cocoa
090821 Ruby Sapporo Night Ruby CocoaTomoki Maeda
 
React NativeでTwitterクライアントを作ってみよう
React NativeでTwitterクライアントを作ってみようReact NativeでTwitterクライアントを作ってみよう
React NativeでTwitterクライアントを作ってみようdcubeio
 
【18-C-5】C# で iOS/Androidアプリ開発 - Visual Studio 2015 + Xamarin + MVVMCross -
【18-C-5】C# で iOS/Androidアプリ開発 - Visual Studio 2015 + Xamarin + MVVMCross -【18-C-5】C# で iOS/Androidアプリ開発 - Visual Studio 2015 + Xamarin + MVVMCross -
【18-C-5】C# で iOS/Androidアプリ開発 - Visual Studio 2015 + Xamarin + MVVMCross -ShinichiAoyagi
 
既存Objective-CプロジェクトをSwiftに移行した時ハマったこと
既存Objective-CプロジェクトをSwiftに移行した時ハマったこと既存Objective-CプロジェクトをSwiftに移行した時ハマったこと
既存Objective-CプロジェクトをSwiftに移行した時ハマったことapuruni
 
Objective-C Generics LT version
Objective-C Generics LT versionObjective-C Generics LT version
Objective-C Generics LT versionGoichi Hirakawa
 
SwiftとCocoaPodsで始めるサクサクiOS開発!
SwiftとCocoaPodsで始めるサクサクiOS開発! SwiftとCocoaPodsで始めるサクサクiOS開発!
SwiftとCocoaPodsで始めるサクサクiOS開発! Koji Shiraishi
 
Node.js で Web アプリ開発
Node.js で Web アプリ開発Node.js で Web アプリ開発
Node.js で Web アプリ開発Tatsumi Naganuma
 
About SnapKit - Open source lab -
About SnapKit - Open source lab -About SnapKit - Open source lab -
About SnapKit - Open source lab -Daisuke Yamashita
 
XcodeのTargetについてのTIPS
XcodeのTargetについてのTIPSXcodeのTargetについてのTIPS
XcodeのTargetについてのTIPSYoichiro Sakurai
 
LightSwitch 結局何ができるの
LightSwitch 結局何ができるのLightSwitch 結局何ができるの
LightSwitch 結局何ができるのYoshitaka Seo
 
PHPカンファレンス関西 2011
PHPカンファレンス関西 2011PHPカンファレンス関西 2011
PHPカンファレンス関西 2011Takako Miyagawa
 
C#のやさしさを語る時間
C#のやさしさを語る時間C#のやさしさを語る時間
C#のやさしさを語る時間kamukiriri
 
T35 ASP.NET MVCを使ったTDD入門
T35 ASP.NET MVCを使ったTDD入門T35 ASP.NET MVCを使ったTDD入門
T35 ASP.NET MVCを使ったTDD入門normalian
 
【第45回コンピュータビジョン勉強会@関東】NVIDIA VisionWorks Tips紹介
【第45回コンピュータビジョン勉強会@関東】NVIDIA VisionWorks Tips紹介【第45回コンピュータビジョン勉強会@関東】NVIDIA VisionWorks Tips紹介
【第45回コンピュータビジョン勉強会@関東】NVIDIA VisionWorks Tips紹介Yasuhiro Yoshimura
 
Salesforce Lightning をやってみてあれこれ
Salesforce Lightning をやってみてあれこれSalesforce Lightning をやってみてあれこれ
Salesforce Lightning をやってみてあれこれ寛 吉田
 
Unity C#と.NET Core(MagicOnion) C# そしてKotlinによるハーモニー
Unity C#と.NET Core(MagicOnion) C# そしてKotlinによるハーモニーUnity C#と.NET Core(MagicOnion) C# そしてKotlinによるハーモニー
Unity C#と.NET Core(MagicOnion) C# そしてKotlinによるハーモニーYoshifumi Kawai
 

Similar to SwiftでObjective-Cコードに立ち向かう (20)

Nullabilityについて
NullabilityについてNullabilityについて
Nullabilityについて
 
Objective-Cプログラマのためのswift導入法
Objective-Cプログラマのためのswift導入法Objective-Cプログラマのためのswift導入法
Objective-Cプログラマのためのswift導入法
 
Microsoft DevOps Hackathon (Sep 2015) Team 4 Presentation
Microsoft DevOps Hackathon (Sep 2015) Team 4 PresentationMicrosoft DevOps Hackathon (Sep 2015) Team 4 Presentation
Microsoft DevOps Hackathon (Sep 2015) Team 4 Presentation
 
Objective-C/Swift コードの共用
Objective-C/Swift コードの共用Objective-C/Swift コードの共用
Objective-C/Swift コードの共用
 
090821 Ruby Sapporo Night Ruby Cocoa
090821 Ruby Sapporo Night Ruby Cocoa090821 Ruby Sapporo Night Ruby Cocoa
090821 Ruby Sapporo Night Ruby Cocoa
 
React NativeでTwitterクライアントを作ってみよう
React NativeでTwitterクライアントを作ってみようReact NativeでTwitterクライアントを作ってみよう
React NativeでTwitterクライアントを作ってみよう
 
【18-C-5】C# で iOS/Androidアプリ開発 - Visual Studio 2015 + Xamarin + MVVMCross -
【18-C-5】C# で iOS/Androidアプリ開発 - Visual Studio 2015 + Xamarin + MVVMCross -【18-C-5】C# で iOS/Androidアプリ開発 - Visual Studio 2015 + Xamarin + MVVMCross -
【18-C-5】C# で iOS/Androidアプリ開発 - Visual Studio 2015 + Xamarin + MVVMCross -
 
既存Objective-CプロジェクトをSwiftに移行した時ハマったこと
既存Objective-CプロジェクトをSwiftに移行した時ハマったこと既存Objective-CプロジェクトをSwiftに移行した時ハマったこと
既存Objective-CプロジェクトをSwiftに移行した時ハマったこと
 
Objective-C Generics LT version
Objective-C Generics LT versionObjective-C Generics LT version
Objective-C Generics LT version
 
SwiftとCocoaPodsで始めるサクサクiOS開発!
SwiftとCocoaPodsで始めるサクサクiOS開発! SwiftとCocoaPodsで始めるサクサクiOS開発!
SwiftとCocoaPodsで始めるサクサクiOS開発!
 
Node.js で Web アプリ開発
Node.js で Web アプリ開発Node.js で Web アプリ開発
Node.js で Web アプリ開発
 
About SnapKit - Open source lab -
About SnapKit - Open source lab -About SnapKit - Open source lab -
About SnapKit - Open source lab -
 
XcodeのTargetについてのTIPS
XcodeのTargetについてのTIPSXcodeのTargetについてのTIPS
XcodeのTargetについてのTIPS
 
LightSwitch 結局何ができるの
LightSwitch 結局何ができるのLightSwitch 結局何ができるの
LightSwitch 結局何ができるの
 
PHPカンファレンス関西 2011
PHPカンファレンス関西 2011PHPカンファレンス関西 2011
PHPカンファレンス関西 2011
 
C#のやさしさを語る時間
C#のやさしさを語る時間C#のやさしさを語る時間
C#のやさしさを語る時間
 
T35 ASP.NET MVCを使ったTDD入門
T35 ASP.NET MVCを使ったTDD入門T35 ASP.NET MVCを使ったTDD入門
T35 ASP.NET MVCを使ったTDD入門
 
【第45回コンピュータビジョン勉強会@関東】NVIDIA VisionWorks Tips紹介
【第45回コンピュータビジョン勉強会@関東】NVIDIA VisionWorks Tips紹介【第45回コンピュータビジョン勉強会@関東】NVIDIA VisionWorks Tips紹介
【第45回コンピュータビジョン勉強会@関東】NVIDIA VisionWorks Tips紹介
 
Salesforce Lightning をやってみてあれこれ
Salesforce Lightning をやってみてあれこれSalesforce Lightning をやってみてあれこれ
Salesforce Lightning をやってみてあれこれ
 
Unity C#と.NET Core(MagicOnion) C# そしてKotlinによるハーモニー
Unity C#と.NET Core(MagicOnion) C# そしてKotlinによるハーモニーUnity C#と.NET Core(MagicOnion) C# そしてKotlinによるハーモニー
Unity C#と.NET Core(MagicOnion) C# そしてKotlinによるハーモニー
 

Recently uploaded

知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptxsn679259
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Gamesatsushi061452
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsWSO2
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video UnderstandingToru Tamaki
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...Toru Tamaki
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルCRI Japan, Inc.
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイスCRI Japan, Inc.
 

Recently uploaded (10)

知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 

SwiftでObjective-Cコードに立ち向かう