2017-09-03 33 views
0

我正在嘗試在Linux中將Narcissist例程從Rosetta Code轉換爲Swift腳本。Swift中的自戀式例程

目標是獲取腳本本身的內容並檢查用戶提供的信息。如果相同,則返回True或Accept。在蟒蛇,它看起來像:

import sys 
with open(sys.argv[0]) as quine: 
    code = raw_input("Enter source code: ") 
    if code == quine.read(): 
     print("Accept") 
    else: 
     print("Reject") 

我已經不太遠製成:

#! /usr/bin/swift 

let script = CommandLine.arguments[0] 
let mytext = String.init(contentsOfFile: script) 

導致錯誤:

./command.swift:4:21: error: argument labels '(contentsOfFile:)' do not match any available overloads 
let mytext = String.init(contentsOfFile: script) 
        ^ ~~~~~~~~~~~~~~~~~~~~~~~~ 
  • 如何加載的內容(運行)腳本變成一個變量使用Swift?

  • 什麼是Swift語言中的超載?

+0

那麼你的實際問題是什麼? – Alexander

+0

請注意,'String.init(contentsOf:)'需要一個'URL'參數,而您可能正在尋找'String.init(contentsOfFile:)',它需要一個'String'的爭論 – Alexander

+0

問題在於,將腳本內容加載到變量中。相同的腳本正在執行。此外,如何將.arguments [0]擴展爲完整的URL? –

回答

0

感謝您的有益的意見,我發現了問題的解決方案。以下是代碼:

#! /usr/bin/swift 
import Foundation 

let script = CommandLine.arguments[0] 
print(script) 
let mytext = try? String.init(contentsOfFile: script, encoding: .utf8) 

var enteredtext = readLine() 
if mytext == enteredtext { 
    print("Accept") 
} else { 
    print("Reject") 
} 
-1

首先創建變量空

var text = "" 

然後在

override func viewDidLoad() { 
     super.viewDidLoad() 


    let script = CommandLine.arguments[0] 
    text = String(contentsOf: script) 

} 
+0

謝謝,但爲什麼重寫? '錯誤:'重寫'只能在類成員上指定 –

+0

你好像重複了一遍(func viewDidLoad())它僅在類 –

+3

@MajedDkahellalah中使用過一次,'viewDidLoad()'用於iOS應用程序(或最近的macOS應用程序)。 OP正在詢問關於Linux上的Swift作爲腳本語言。 – OOPer