Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
JSPatch Introduction
Search
Wei Wang
August 06, 2015
Programming
230
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
170
面向协议编程与 Cocoa 的邂逅
onevcat
14
5k
Swift 3 - From Expert to Beginner
onevcat
2
280
如何打造一个让人愉快的框架
onevcat
4
23k
Objective-C Runtime Swizzle
onevcat
0
240
Unity Memory
onevcat
0
190
Other Decks in Programming
See All in Programming
言葉の格闘技のススメ~紙とペンと言葉から始める、キャリアの描き方~
progresscicada
2
140
テーブルをDELETEした
yuzneri
0
140
5分で問診!Composer セキュリティ健康診断
codmoninc
0
960
仕様駆動開発の消費期限
watany
20
8.1k
いまどきの Codex で開発する visionOS アプリの開発スタイルについて
karad
0
130
ITヒヤリハットを整理してみた ~ライフサイクルと原因から考える再発防止策~
koukimiura
1
140
Apache Hive: Toward a Cloud Native Lakehouse
okumin
0
190
運用ダッシュボードの設計を誰も教えてくれないのだけどみなさんどうしてるんですか? - チームに監視するという文化を根付かせるための第一歩を踏みたい -
satoshi256kbyte
1
110
php-fpmのプロセスが枯渇した日-調査・対処・そして本当にやるべきだったこと-
shibuchaaaan
0
270
the container ship “Apple Silicon”@WWDC26 Recap -Japan-\(region).swift
shingangan
0
120
Foundation Models frameworkで画像分析
ryodeveloper
1
610
AI Engineeringは、AIプロダクトだけのものか? 〜AIがソフトウェアを作る時代の新しい当たり前〜 / No AI in your product. AI Engineering in your development.
rkaga
4
400
Featured
See All Featured
Pawsitive SEO: Lessons from My Dog (and Many Mistakes) on Thriving as a Consultant in the Age of AI
davidcarrasco
0
210
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
46
2.9k
Building Better People: How to give real-time feedback that sticks.
wjessup
370
20k
Claude Code のすすめ
schroneko
67
230k
How Fast Is Fast Enough? [PerfNow 2025]
tammyeverts
3
750
B2B Lead Gen: Tactics, Traps & Triumph
marketingsoph
0
200
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
659
62k
Google's AI Overviews - The New Search
badams
0
1.1k
Efficient Content Optimization with Google Search Console & Apps Script
katarinadahlin
PRO
1
790
KATA
mclloyd
PRO
35
15k
The Illustrated Guide to Node.js - THAT Conference 2024
reverentgeek
1
430
[SF Ruby Conf 2025] Rails X
palkan
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