【问题标题】:Swift 3 syntax issues with URLURL 的 Swift 3 语法问题
【发布时间】:2017-05-22 16:06:08
【问题描述】:

我正在尝试在 Xcode 8 中将 C# 示例转换为 swift,但我不断遇到语法问题。查看代码的小示例:

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 我得到错误

参数标签 '(String:)' 不匹配任何可用的重载

对于 APIManagerBaseAddress

二元运算符“+”不能应用于“URL!”类型的操作数和'字符串'

感谢任何帮助,因为我尝试了一大堆语法可能性:)

-edit- 感谢大家的帮助和建议!

【问题讨论】:

  • 永远不要将属性声明为在 init 方法中初始化的隐式解包可选。勇敢地宣布它们是非可选的。或者 - 如果属性应该是可选的 - 将它们声明为真正的可选 (?)。
  • PS:并且符合变量、方法和参数标签以小写字母开头的命名约定可以避免那种(自制)错误...
  • 谢谢,我会记住的。基本上它是我试图在 swift 中实现的 API 的 C# 代码示例。所以我使用了这个例子中的命名约定。

标签: swift swift3 xcode8


【解决方案1】:

首先是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/")

【讨论】:

  • 我想你想要appendingPathComponent,而不是appendingPathExtension
  • @rmaddy 你说的很对,我输入的是appendingPathExtension 而不是appendingPathComponent 谢谢你的纠正,伙计:)
  • 谢谢!感谢您提供指向开发人员参考资料的链接,这将极大地帮助我获得正确的语法。
【解决方案2】:

这就是你在 Swift 中编写代码的方式

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/"))
    }
}

【讨论】:

    【解决方案3】:

    给你。我将您的路径放入一个变量中(如果您打算以编程方式更改路径,请将 let 更改为 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)")
    
        }
    }
    

    【讨论】:

      【解决方案4】:

      使用string 而不是String

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

      【讨论】:

        猜你喜欢
        • 2017-03-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多