2016-08-12 18 views
1

コードを試しています。私はいくつかの支援が必要です。私はクラスと変数を含む迅速なファイルであるファイルを作成しています。私は正常にファイルを作成して読むことができます。今、私はこの素早いファイルを使用してその変数(この場合はv)にアクセスできますか?インポートSwiftクラスを動的に作成

func writeF() { 

    let file = "Sample.swift" 
    let text = "import Foundation \n" + 
       "public class Sample { \n" + 
       " let v: Int = 0 \n" + 
       "}" 

    if let dir = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomainMask.AllDomainsMask, true).first { 
     let path = NSURL(fileURLWithPath: dir).URLByAppendingPathComponent(file) 

     //writing 
     do { 
      try text.writeToURL(path, atomically: false, encoding: NSUTF8StringEncoding) 
     } 
     catch {print("error writing file")} 

     //reading 
     do { 
      let text2 = try NSString(contentsOfURL: path, encoding: NSUTF8StringEncoding) 
      print(text2) 
     } 
     catch { 

      print("error reading file") 
     } 
    } 
} 
+0

あなたのコードをコンパイルする理由である:) –

+0

はありませんので...笑:) .. thatsのこの実験の終わり。ありがとうございました。 –

+0

正確に何を達成したいですか?私が知っている実行時のあらゆる変化するメソッドはすごいです –

答えて

1

実行時にコードを追加することはできません。あなたのコードがコンパイルされると、人間が読むことができる* .swiftファイルは残っていません。コンパイル後、コードは基本的に01です。

0

FelixSFDが答えたところでは、Swiftファイルを動的に構築し、通常のサンドボックス環境ではなく、デバイス上で実行時にコンパイルすることはできません。 Jailbrokenデバイスを使用している場合は、Swiftオープンソースランタイムをビルドしてインストールし、その場でプログラムをコンパイルできます。

代わりに、JavaScriptCoreフレームワークを調べて、動的JavaScriptコードをビルドして実行し、アプリにブリッジすることができます。ここで

はJavaScriptにオブジェクトを渡すとクラスマッピングと同じオブジェクトを返すの簡単な例です:

import JavaScriptCore 

let js = "function test(input) { return input }" 

class TestClass: NSObject { 
    var name: String 

    init(name: String) { 
     self.name = name 
    } 
} 

let context = JSContext() 
context.evaluateScript(js) 

let testFunc = context.objectForKeyedSubscript("test") 
let result = testFunc.callWithArguments([TestClass(name: "test")]) 
result.toDictionary() 

let testObj = result.toObjectOfClass(TestClass.self) as? TestClass 
testObj?.name // "test" 
関連する問題