2017-05-22 96 views
0

我試圖將C#示例轉換爲Xcode 8中的swift,但我不斷收到語法問題。見小的代碼示例:Swift 3與URL的語法問題

public class ToonAPIClient { 
    private var APIManagerBaseAddress: URL! 
    private var APIBaseAddress: URL! 

    public init() { 
     APIManagerBaseAddress = URL(String: "https://path.to.baseurl/") 
     APIBaseAddress = URL(String: APIManagerBaseAddress + "append/path/data/") 
    } 
} 

APIManagerBaseAddress我得到的錯誤

參數標籤 '(字符串:)' 不匹配任何可用的重載

而對於APIManagerBaseAddress

二元運算符'+'不能應用於'URL!'類型的操作數。和「字符串」

,因爲我試過的語法可能性的sh * t加載:)

CNC中感謝所有幫助和建議任何幫助表示讚賞!

+2

**絕對不要將屬性聲明爲隱式解包可選,它們在'init'方法**中初始化。勇敢並宣佈他們是非可選的。或者 - 如果屬性應該是可選的 - 將它們聲明爲真正的可選項('?')。 – vadian

+1

PS:符合變量,方法和參數標籤以小寫字母開頭的命名約定可以避免那些(自制)錯誤... – vadian

+0

謝謝,我會牢記這一點。基本上它是一個我試圖在swift中實現的API的C#代碼示例。所以我使用了這個例子中的名字約定。 –

回答

5

首先,它是init(string:)init(String:)也使用appendingPathComponentAPIManagerBaseAddress

APIManagerBaseAddress = URL(string: "https://path.to.baseurl/")! 

// you can add values like that in Swift 
APIBaseAddress = APIManagerBaseAddress.appendingPathComponent("append/path/data/") 
+3

我想你想'appendingPathComponent',而不是'appendingPathExtension' – rmaddy

+0

@rmaddy你是完全正確的,我已經鍵入'appendingPathExtension'而不是'appendingPathComponent'感謝糾正我的隊友:) –

+1

謝謝!感謝您與開發人員參考的鏈接,將幫助我獲得正確的語法。 –

0

使用string而不是String

public init() { 
    APIManagerBaseAddress = URL(string: "https://path.to.baseurl/") 
    APIBaseAddress = URL(string: APIManagerBaseAddress + "append/path/data/") 
} 
0

這是你將如何把代碼寫在斯威夫特

public class ToonAPIClient { 
    private var APIManagerBaseAddress: URL! 
    private var APIBaseAddress: URL! 
public init() { 
    //It is string not String in here 
    APIManagerBaseAddress = URL(string: "https://path.to.baseurl/") 

    // you can add values like that in Swift 
    APIBaseAddress = URL(string: URL(string: "\(APIManagerBaseAddress)append/path/data/")) 
    } 
} 
0

在這裏,你去。我將你的路徑插入一個變量(如果你打算以編程方式更改路徑,請更改爲var)並縮短代碼。

希望這會有所幫助。

public class ToonAPIClient { 
    private var APIManagerBaseAddress: URL! 
    private var APIBaseAddress: URL! 

    let path = "append/path/data/" 

    public init() { 
     APIManagerBaseAddress = URL(string: "https://path.to.baseurl/\(path)") 

    } 
}