2017-05-22 50 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)") 

    } 
}