Closed. This question needs to be more focused。它当前不接受答案。












想改善这个问题吗?更新问题,使其仅关注editing this post一个问题。

去年关闭。



Improve this question




我已经阅读了Swift编程语言的基础知识,例如变量,类,函数等。我不了解的是,当我开始尝试构建应用程序时,是如何设置函数的结构。我猜函数,或者我在下面列出的内容。我将尽力而为。

我想了解人们的知识,或者在尝试完成某项工作时应该在哪里学习。

例如,我用Google搜索了一个HTTP调用,然后出现了以下代码:
let request = URLRequest(url: NSURL(string: "https://api.nasa.gov/planetary/apod?api_key=DEMO_KEY")! as URL)
do {
    // Perform the request
    var response: AutoreleasingUnsafeMutablePointer<URLResponse?>? = nil
    let data = try NSURLConnection.sendSynchronousRequest(request, returning: response)

我完全迷失了:
URLRequest(url: NSURL(string: "https://api.nasa.gov/planetary/apod?api_key=DEMO_KEY")! as URL)

您在哪里阅读以了解何时使用诸如URLRequest之类的内容,或者如何或何时将url:放在其前面。尽管这只是一个示例,但我注意到在构建一个快速的应用程序时,你们会使用诸如NSUrl,NSObject,URLRequest之类的东西。而且在文档中,我还没有了解这些事情。而且我不明白你们如何知道何时添加问号“?”,或者如何格式化函数,如上面的示例。

如果我提出的问题不正确,我总是可以解释更多。

如果您知道我可以在线搜索的内容,那么我就可以知道要尝试的知识,那将会有所帮助。或一本教您有关UIWindows的书,以及使用诸如NSObject和UIWindows之类的基本功能会很有帮助的书。

很难理解API文档。如果您不了解api文档和语法。你怎么能学习。我想有时通过示例学习比较容易。

最佳答案

好的,因为您的问题尚未解决得太广泛,并且因为有争议,所以我将至少为您提供一个我认为您实际提出的问题的开始...

在哪里可以找到这些东西的含义:

首先,对于Swift,您需要阅读The Swift Programming Language: A Swift Tour。这将为您提供一个非常不错的初学者对该语言及其使用方法的概述。它包含一个downloadable Swift Playground,它包含整个导览,并允许您尝试一些事情并实践所学内容。

接下来,当您看到诸如URLRequest之类的内容时,可以在Developer Documentation中查找它。要获取此文档,您可以搜索名称和文本“开发人员文档”。或者,您可以转到Developer site并从那里搜索。最后,您可以在Xcode的文档窗口中查找它:从Xcode菜单,Window-> Developer Documentation。

通常,开发人员站点还将提供sample code。这真的很酷,因为您可以下载,使用它,并根据许可信息在自己的代码中使用它。这段代码中通常还会带有注释和说明,以帮助您了解其功能。示例代码是学习何时以及如何使用遇到的不同功能的一种非常好的方法!

话虽如此,文档本身(与示例代码分开)对于初学者来说可能非常令人困惑。但是,随着经验的积累,您将会了解它试图告诉您的更多信息。

文档告诉您什么:

让我们遍历documentation以获得URLRequest:

ios - Swift语法,并理解语言的某些部分-LMLPHP

在顶部,您看到这是一个Structure,而不是Class。在“快速浏览”中,您将学到差异。

在名称URLRequest下,您会看到描述。这里的描述通常和新手一样清晰。但是,在进行一些描述之后,会提供有关该项目的详细且非常好的信息。例如,看看UIViewController documentation

在页面的右侧,您可以找到该项目的可用时间(例如,iOS 7以来URLRequest可用),使用该框架需要导入的框架(此处为Foundation)以及其他信息的链接。

“主题”列出了可用于执行各种操作的属性和功能。例如,您可能想使用URLRequest对象“创建请求”或“使用缓存策略”。

ios - Swift语法,并理解语言的某些部分-LMLPHP

“关系”为您提供有关该项目所遵循的继承和协议的信息。这些项目显示了可以在给定对象中使用的其他属性和方法。同样,这些对于初学者可能会造成混淆,但是最终您会明白的。例如,URLRequest符合Equatable。这意味着您也可以比较urlRequest1 == urlRequest2!=

ios - Swift语法,并理解语言的某些部分-LMLPHP

最后,“另请参见”部分向您展示了与此相关的其他内容。您可以使用此部分来了解有关可能要与当前正在查看的项一起使用的项的更多信息。

ios - Swift语法,并理解语言的某些部分-LMLPHP

您的示例如何分解:

您选择的特定示例是创建或“实例化”新的URLRequest对象:

URLRequest(url: NSURL(string: "https://api.nasa.gov/planetary/apod?api_key=DEMO_KEY")! as URL)

因此,它将使用与“创建请求”有关的“主题”。这说明了我们:
init(url: URL, cachePolicy: URLRequest.CachePolicy, timeoutInterval: TimeInterval)
    Creates and initializes a URL request with the given URL and cache policy.

现在,事实证明,“创建请求”主题实际上在这里缺少功能。转到Swift游乐场,然后输入URLRequest(,在左侧paren处停止。您会看到出现两个项目:一项显示以上内容(不包括init部分),而另一项仅显示(url: URL)。我会在几秒钟后再说...

新手可能没有意识到他们不需要使用文档中显示的init部分。您可以根据需要使用URLRequest.init(...),但可以将其简化为URLRequest(...),其中的点表示内部内容。因此,回到缺少的初始化程序,它应在文档中显示为:
init(url: URL)

那就是您的示例实际使用的那个,因此我将继续介绍它。

括号内的部分是“参数”或“参数”。 (有一个细微的差别,但是许多开发人员可以互换使用这两个术语。)您将在Swift Tour中了解到,如果需要标签,它将在那儿。否则,它将带有下划线(_)。因此,在这里,您必须具有url:的标签。如果在Xcode 9中键入此内容,则将得到:
URLRequest(url: URL)

Xcode提供了所需的标签,并提示您如何填充空格:在url:标签上,您需要提供URL -type对象。

如果您自己编写函数,则标签代表用于访问该信息的变量名。由于这是Foundation提供的函数,因此它是URLRequest初始化函数将在其内部使用的变量名称,隐藏起来(或“封装”)在您的视线之外,但对于创建URLRequest而言是必需的。

现在,您的示例可以分为两部分。由于他们需要一个URL对象,因此他们在url:参数内部创建了它。该示例可以分解为以下内容:
let nsURL = NSURL(string: "https://api.nasa.gov/planetary/apod?api_key=DEMO_KEY")! as URL
let request = URLRequest(url: nsURL)

但是,NSURL命令实际上来自Objective-C。 (根据经验,所有以NS开头的东西都来自Objective-C。当这些东西转换成纯Swift时,NS就消失了。)Swift现在拥有自己的NSURL版本,因此示例代码是“广播”或最后将NSURL更改为URL。这可以在Swift中完全重写为:
let url = URL(string: "https://api.nasa.gov/planetary/apod?api_key=DEMO_KEY")
let request = URLRequest(url: url!)

问号和感叹号的含义是:

问号表示“可选”值,而感叹号表示“强制展开可选”值。在导览中讨论了这一点,但它可能是Swift最令人困惑的方面之一,直到您最终了解它为止。考虑以下示例:
// This is supposed to be a String value - but it's empty right now ("nil").
// Therefore, I put a '?' on the type name to tell Swift that it's a String,
// but it could be nil (meaning it's value is "optional" - it may be there or not)
let nilString: String? = nil

// I'll go ahead and give the string a value here:
nilString = "I'm not nil anymore."

// Now, I'll use this String value - but I told Swift it might be empty!
// I can tell Swift that I'm CERTAIN a value is present by "force unwrapping" it:
// that is, indicating I'm sure it's not nil by adding a '!'
let newString = nilString! + "testing"

如果我尝试使用仍为nil的值,Swift会对我大喊:fatal error: unexpectedly found nil while unwrapping an Optional value

好的。我相信我已经涵盖了您实际询问的大部分内容,因此在SO管理员将我赶出场之前,在这里结束我的“书”!如果我猜对了您要寻找的内容,则可以将其作为答案。无论哪种方式,请阅读Swift导览,并在您的编码生涯中踏出一条年轻的成功之路!

10-08 03:33