Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
JSPatch Introduction
Search
Wei Wang
August 06, 2015
Programming
240
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
JSPatch Introduction
Wei Wang
August 06, 2015
More Decks by Wei Wang
See All by Wei Wang
網路之難,難於上青天 - iPlayground 2019
onevcat
11
5.5k
GMTC 2019 - 在分歧中发展,2019 我们能用 Swift 做什么
onevcat
0
1.3k
从 Swift 到机器学习
onevcat
2
1.1k
iOS Dev - The Dark Side
onevcat
0
180
面向协议编程与 Cocoa 的邂逅
onevcat
14
5k
Swift 3 - From Expert to Beginner
onevcat
2
290
如何打造一个让人愉快的框架
onevcat
4
23k
Objective-C Runtime Swizzle
onevcat
0
250
Unity Memory
onevcat
0
190
Other Decks in Programming
See All in Programming
設計次第でAIコードの読む量は減らせる / designing-for-code-reading
minodriven
22
7.6k
仕様駆動開発による爆速プロダクト開発 / Bakusoku Spec Driven Development
kobakei
0
140
App Storeの外へ──日本のiOSサイドローディング入門 for iOSDC Japan 2026
yuukiw00w
0
270
JRuby: Past, Present, and Future
headius
0
210
一人だけ、Kiroが静止する日
hideg
0
130
テストを司るデーモンに会いに行く 〜隔離した仮想マシンでテストを通すまで〜
h1d3mun3
1
590
Omarchy Tokyo やると聞いて UMPC 買ってセットアップしてきた
mtsmfm
0
180
ゲームコントローラやキーボードのファームウェアをSwiftで書く
kishikawakatsumi
1
270
FreeBSDでZabbixを動かす
kenkino
0
340
WebRTC映像をAirPlayに対応させる挑戦.pdf
monolithic_adam
0
320
Everything will be SERVERLESS — 信じて運用した10年の経験値 / Everything Will be Serverless — Lessons Learned from 10 Years of Operational Experience
seike460
PRO
1
560
Ghostty + Neovimで作る 透明でカッコ良い開発環境
j341nono
0
140
Featured
See All Featured
Leading Effective Engineering Teams in the AI Era
addyosmani
9
2.7k
Marketing to machines
jonoalderson
1
5.8k
So, you think you're a good person
axbom
PRO
2
2.2k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
28
3.7k
Neural Spatial Audio Processing for Sound Field Analysis and Control
skoyamalab
0
530
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
21
1.6k
Docker and Python
trallard
47
4.2k
Music & Morning Musume
bryan
48
7.4k
The Impact of AI in SEO - AI Overviews June 2024 Edition
aleyda
6
1.2k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
35
2.9k
The untapped power of vector embeddings
frankvandijk
2
1.9k
Discover your Explorer Soul
emna__ayadi
2
1.3k
Transcript
ࣗݾհ w ԦቨʢΦΪPOFWDBUʣ+1 w -JOF"ET -JOFόΠτ (BNF$BTU 5IVOEFS w
IUUQTHJUIVCDPNPOFWDBU w IUUQPOFWDBU
ੈքҰ൪ͷ ϓϩάϥϛϯάݴޠʁ
+BWB4DSJQUؒҧ͍ͳ͍ IUUQHJUIVUJOGP
+BWB4DSJQU$PSF J04
+BWB4DSJQU$PSF var num = 5 + 5 var triple =
function(value) { return value * 3} triple(num) //30 import JavaScriptCore let context = JSContext() context.evaluateScript("var num = 5 + 5") context.evaluateScript("var triple = function(value) { return value * 3 }") let tripleNum: JSValue = context.evaluateScript("triple(num)") +BWB4DSJQU 4XJGU
import JavaScriptCore let context = JSContext() context.evaluateScript("var num = 5
+ 5") context.evaluateScript("var triple = function(value) { return value * 3 }") let tripleNum: JSValue = context.evaluateScript("triple(num)") 1MBJO4USJOH'VODUJPOBMJUZ
import JavaScriptCore let context = JSContext() context.evaluateScript("var num = 5
+ 5") context.evaluateScript("var triple = function(value) { return value * 3 }") let tripleNum: JSValue = context.evaluateScript("triple(num)") 1MBJO4USJOH'VODUJPOBMJUZ 3VOUJNF
+41BUDI Ԧቨ
+BWB4DSJQUΛͬͯɺ ΞϓϦͷϝιʔυΛࠩ͠ସ͑ΔϥΠϒϥϦʔ +41BUDIͱ IUUQTHJUIVCDPNCBOH+41BUDI
8IZ w "QQਃͱϨϏϡʔ ͍ w ಛٸਃ੍ؒݶ w मਖ਼͚ͩͰͳ͘ɺػ ೳՃՄೳɻ
͍ํ
͍ํ
͍ํ w $PDPB1PETQPE+41BUDI w <+1&OHJOFTUBSU&OHJOF> w <+1&OHJOFFWBMVBUF4DSJQUTDSJQU> 4DSJQU
ࠩ͠ସ͑ΔͷΛఆٛ͢ΔKT 4DSJQU ϩʔΧϧϑΝΠϧɺωοτɺετϦϯά ಛఆͳOBNFDPOWFOUJPOͰɺ0CKFDUJWF$ޓ
%FNP Talk is cheap. Show me the code.
3VMFEFpOF$MBTT w Ϋϥεͷϝιʔυ࠶ఆٛ defineClass("ClassName", { method: function() { ... },
}) @implementation ClassName -(void)method { … } defineClass(classDeclaration, instanceMethods, classMethods)
3VMFΞϯμʔόʔ w ΫϥεͷεϖʔεΛࠩ͠ସ͑Δ @implementation JPTestObject - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{ } @end defineClass("JPTableViewController", { tableView_didSelectRowAtIndexPath: function(tableView, indexPath) { ... }, })
3VMF03*( w 03*(Λ͍ͨΒɺલͷ࣮ΛݺͿ @implementation JPTableViewController - (void) viewDidLoad { }
@end defineClass("JPTableViewController", { viewDidLoad: function() { self.ORIGviewDidLoad(); }, })
3VMFTFUUFSHFUUFS w TFUUFSPSHFUUFSΛ͏ @interface JPTableViewController @property (nonatomic) NSArray *data; @end
@implementation JPTableViewController @end defineClass("JPTableViewController", { viewDidLoad: function() { var data = self.data() self.setData(data.toJS().push("JSPatch") }, })
3VMF0UIFS IUUQTHJUIVCDPNCBOH+41BUDI XJLJ6TBHFPGEFpOF$MBTT μϒϧΞϯμʔόʔ CMPDL($% TVQFS QSPUPDPM OFXQSPQFSUZNFUIPE FYUFOTJPO
+41BUDI࣮ݱݪཧ ForwardInvocation Core Concept: IUUQCMPHDOCBOHOFUUFDI தࠃޠͰ͕͢ɻɻ
ϦεΫ w தؒऀ߈ܸ .*5. )5514ඞཁ w ϩʔΧϧվ͟Μ҉߸Խ͢Δ w ύϑΥʔϚϯεόʔδϣϯཧΫϦςΟΧϧ όά͚ͩ
4XJGU
4XJGU w /40CKFDUͱγεςϜ"1*0, EZOBNJD EJTQBUDI w ଞͷEZOBNJDLFZXPSEΛՃඞཁ SVOUJNF ར༻͢ΔͨΊ
w +4ʹɺDMBTT໊ͷલNPEVMF໊Ճඞཁ w ݁ɿ͑·͕͢ɺ໘ɻΊͯͷํ͕͍͍
5IBOLZPV '"2