swift で javascript 始めませんか? #iosdc

62

Upload: tomohiro-kumagai

Post on 16-Apr-2017

4.123 views

Category:

Software


4 download

TRANSCRIPT

Page 1: Swift で JavaScript 始めませんか? #iOSDC
Page 2: Swift で JavaScript 始めませんか? #iOSDC
Page 3: Swift で JavaScript 始めませんか? #iOSDC
Page 4: Swift で JavaScript 始めませんか? #iOSDC

for (var index in lines) { var line = lines[index]; var itemContent; if (line.match(expression)) { itemContent = RegExp.$2; } var outputItem = core.escapeHtml(itemContent); return outputItems.map(convertToTag).join('\n'); }

Page 5: Swift で JavaScript 始めませんか? #iOSDC
Page 6: Swift で JavaScript 始めませんか? #iOSDC
Page 7: Swift で JavaScript 始めませんか? #iOSDC
Page 8: Swift で JavaScript 始めませんか? #iOSDC
Page 9: Swift で JavaScript 始めませんか? #iOSDC
Page 10: Swift で JavaScript 始めませんか? #iOSDC
Page 11: Swift で JavaScript 始めませんか? #iOSDC
Page 13: Swift で JavaScript 始めませんか? #iOSDC
Page 14: Swift で JavaScript 始めませんか? #iOSDC
Page 15: Swift で JavaScript 始めませんか? #iOSDC
Page 16: Swift で JavaScript 始めませんか? #iOSDC

関数

クラス型

変数

文字列

変数

Page 17: Swift で JavaScript 始めませんか? #iOSDC
Page 18: Swift で JavaScript 始めませんか? #iOSDC
Page 19: Swift で JavaScript 始めませんか? #iOSDC
Page 20: Swift で JavaScript 始めませんか? #iOSDC
Page 21: Swift で JavaScript 始めませんか? #iOSDC
Page 22: Swift で JavaScript 始めませんか? #iOSDC
Page 23: Swift で JavaScript 始めませんか? #iOSDC
Page 24: Swift で JavaScript 始めませんか? #iOSDC
Page 25: Swift で JavaScript 始めませんか? #iOSDC
Page 26: Swift で JavaScript 始めませんか? #iOSDC

import JavaScriptCore

Page 27: Swift で JavaScript 始めませんか? #iOSDC

let context = JSContext()!

Page 28: Swift で JavaScript 始めませんか? #iOSDC

context.evaluateScript("var v1 = 10") context.evaluateScript("var v2 = 20") context.evaluateScript("var v3 = v1 + v2")

Page 29: Swift で JavaScript 始めませんか? #iOSDC

let value = context.objectForKeyedSubscript("v3")!

print("Answer = ", value) // Answer = 30

// 指定した名前が存在しない場合は undefined let value = context.objectForKeyedSubscript("vX")!

print("Answer = ", value) // Answer = undefined

Page 30: Swift で JavaScript 始めませんか? #iOSDC

let answer = context.evaluateScript("v1 + v2")

Page 31: Swift で JavaScript 始めませんか? #iOSDC
Page 32: Swift で JavaScript 始めませんか? #iOSDC
Page 33: Swift で JavaScript 始めませんか? #iOSDC

let value: JSValue

Page 34: Swift で JavaScript 始めませんか? #iOSDC

• toInt32() -> Int32

• toUInt32() -> UInt32

• toDouble() -> Double

• toNumber() -> NSNumber!

• toString() -> String!

• toBool() -> Bool!

• toObject() -> Any!

• toDate() -> Date!

• toArray() -> [Any]!

• toDictionary() -> [AnyHashable : Any]!

Page 35: Swift で JavaScript 始めませんか? #iOSDC

• isNumber

• isString

• isBoolean

• isObject

• isUndefined

• isNull

• isArray

• isDate

Page 36: Swift で JavaScript 始めませんか? #iOSDC

let article: JSValue = context.evaluateScript("article")!

// プロパティの参照 let title = article.forProperty("title")

// JavaScript メソッドの実行 let note = article.invokeMethod("getDescription", withArguments: [])

Page 37: Swift で JavaScript 始めませんか? #iOSDC

let value1: JSValue = context.objectForKeyedSubscript("v1")!

let value2: JSValue = context.objectForKeyedSubscript("v2")!

if value1 == value2 {

}

Page 38: Swift で JavaScript 始めませんか? #iOSDC
Page 39: Swift で JavaScript 始めませんか? #iOSDC
Page 40: Swift で JavaScript 始めませんか? #iOSDC

• parseInt

• parseFloat • encodeURI • decodeURI • encodeURIComponent

• decodeURIComponent

• encodeURI • eval • escape

• Object

• Array • Date • Math • RegEx

• JSON

• Error

Page 41: Swift で JavaScript 始めませんか? #iOSDC
Page 42: Swift で JavaScript 始めませんか? #iOSDC
Page 43: Swift で JavaScript 始めませんか? #iOSDC

context.evaluateScript("var timeout = 5.0")

Page 44: Swift で JavaScript 始めませんか? #iOSDC

let account = "@es_kumagai"

// Swift 変数 account を、JavaScript に変数 name で登録 context.setObject(account, forKeyedSubscript: "name" as NSString)

Page 45: Swift で JavaScript 始めませんか? #iOSDC

context.evaluateScript( "function getAttribute(name) {" + " return attributes[name];" + "}")

Page 46: Swift で JavaScript 始めませんか? #iOSDC

let output : @convention(block) (String) -> Void = {

NSLog("\(account) : \($0)") }

// クロージャーを AnyObject 型にキャストして登録 context.setObject( unsafeBitCast(output, to: AnyObject.self), forKeyedSubscript: "output" as NSString)

Page 47: Swift で JavaScript 始めませんか? #iOSDC

context.evaluateScript( "function Article(title, body) {" + " this.title = title;" + " this.body = body;" + "}" + "" + "Article.prototype.getDescription = " + " function() {" + " return this.body.substr(0, 10);" + "};")

Page 48: Swift で JavaScript 始めませんか? #iOSDC

@objc protocol ImageInterface : JSExport {

var width: Int { get set } var height: Int { get set }

// インスタンス化をしたい場合は静的メソッドも宣言 static func make(name: String, scale: CGFloat) -> AnyObject }

Page 49: Swift で JavaScript 始めませんか? #iOSDC

class Image : NSObject, ImageInterface {

var width, height: Int required init(name: String, scale: CGFloat) {…}

class func make(name: String, scale: CGFloat) -> AnyObject {

return self.init(name: name, scale: scale)

}

Page 50: Swift で JavaScript 始めませんか? #iOSDC

let image = Image(name: "Profile", scale: 0.8)

context.setObject(image, forKeyedSubscript: "icon" as NSString)

Page 51: Swift で JavaScript 始めませんか? #iOSDC

context.setObject(Image.self, forKeyedSubscript: "Image" as NSString)

// メソッドは、全てのラベルを名前に含めて実行すること context.evaluateScript( "var banner = " + "Image.makeWithNameScale('picture', 0.5)")

Page 52: Swift で JavaScript 始めませんか? #iOSDC
Page 53: Swift で JavaScript 始めませんか? #iOSDC
Page 54: Swift で JavaScript 始めませんか? #iOSDC

context.evaluateScript( "function Article(title, body) {" + " this.title = title;" + " this.body = body;" + "}" + "" + "Article.prototype.getDescription = " + " function() {" + " return this.body.substr(0, 10);" + "};")

Page 55: Swift で JavaScript 始めませんか? #iOSDC
Page 56: Swift で JavaScript 始めませんか? #iOSDC
Page 57: Swift で JavaScript 始めませんか? #iOSDC
Page 58: Swift で JavaScript 始めませんか? #iOSDC

let path = Bundle.main.url( forResource: "JavaScriptAPI", withExtension: "js")! let source = try! String(contentsOf: path)

// 読み込んだ JavaScript をコンテキストで実行

let context = JSContext()!

context.evaluateScript(source)

Page 59: Swift で JavaScript 始めませんか? #iOSDC
Page 60: Swift で JavaScript 始めませんか? #iOSDC
Page 61: Swift で JavaScript 始めませんか? #iOSDC
Page 62: Swift で JavaScript 始めませんか? #iOSDC