在观看第10讲iTunes视频的同时,尝试跟进并编写Smashtag项目代码。
当我将已下载的Twitter包添加到我的Smashtag项目时,当我在TweetTableViewController中引用它时,XCode找不到Tweet类。
由于上述问题,我将属于Twitter软件包的四个类分别添加到项目中。 XCode找到了这四个类,但以这种方式添加它们会产生11个编译错误。
我正在使用iOS 8.3版本之后的XCode版本6.3(6D570)。
还有其他人遇到过这个问题吗?
感谢您阅读我的问题。 〜李
答案 0 :(得分:9)
这可能不是最正确的(阅读:最佳实践)方法,但是我会用它来完成课程的完成。
我刚刚查看了编译错误列表,并将相关属性更改为var
而不是let
。 Constants
无法更改,Swift
新版本只能实例化一次。因此,为了不重写太多代码,我选择创建某些属性var
而不是let
s。
我在iTunes U课程后发现的其他错误:
这是一个带有更正代码的要点,您可以将其用作Twitter程序包,该程序包将与该课程一起使用并修复上述错误,减去Twitter帐户设置:
答案 1 :(得分:3)
正如Christian R. Jimenez所说,“我去了模拟iphone中的设置,并添加了我的Twitter帐户。一切都很完美。”在http://cs193p.m2m.at/cs193p-lecture-10-table-view-winter-2015/。我刚刚添加了我的Twitter帐户并进行了测试,它确实有效!
答案 2 :(得分:2)
我在使用Swift 2.0和Xcode 7.2的Twitter软件包时遇到了类似的问题
我对Swift很新,所以我所做的更改很可能不是最佳做法,但更新的文件工作:https://gist.github.com/awaxman11/9c48c0b4c622bffb879f。
在大多数情况下,我使用了Xcode建议的更改。我做的两个更大的改变是:
IndexedKeyword
struct的init方法,以使用advanceBy()
代替advance()
NSJSONSerialization
的签名以符合新的错误处理系统答案 3 :(得分:0)
我刚刚为同一版本的Xcode安装了Twitter软件包文件。
似乎已经破坏的是,在这个版本的Swift中,常量('让x ......')只能初始化一次,所以如果在声明中给一个常量值('让x = false'),它可能不会在init()函数中更改。 Twitter包提供了一些常量初始值,但随后更改了init()函数中的值。
我的解决方案是遵循当前版本的Apple Swift语言书中建议的样式:将(常)许多常量声明为隐式展开的选项,在init()函数中无条件地为它们赋值( value可以是nil),然后测试它们中的任何一个是否为nil,如果是,则从init()返回nil。
请参阅https://developer.apple.com/library/mac/documentation/Swift/Conceptual/Swift_Programming_Language/Initialization.html,点击"本页"并选择" Failable Initializers"
另外,在TwitterRequest.swift中,我需要添加参数名称' handler:'在几次调用performTwitterRequest(request,handler:handler)。
作为常量初始化的示例,在MediaItem.swift中:
<<原始代码>>
...
public let aspectRatio: Double = 0
...
init?(data: NSDictionary?) {
var valid = false
if let urlString = data?.valueForKeyPath(TwitterKey.MediaURL) as? NSString {
if let url = NSURL(string: urlString) {
self.url = url
let h = data?.valueForKeyPath(TwitterKey.Height) as? NSNumber
let w = data?.valueForKeyPath(TwitterKey.Width) as? NSNumber
if h != nil && w != nil && h?.doubleValue != 0 {
aspectRatio = w!.doubleValue / h!.doubleValue
valid = true
}
}
}
if !valid {
return nil
}
}
...
<<更新后的代码>>
...
public let aspectRatio: Double
...
init?(data: NSDictionary?) {
if let urlString = data?.valueForKeyPath(TwitterKey.MediaURL) as? NSString {
if let url = NSURL(string: urlString as String) {
self.url = url
let h = data?.valueForKeyPath(TwitterKey.Height) as? NSNumber
let w = data?.valueForKeyPath(TwitterKey.Width) as? NSNumber
if h != nil && w != nil && h?.doubleValue != 0 {
aspectRatio = w!.doubleValue / h!.doubleValue
return
}
}
}
return nil
}
...