【发布时间】:2015-06-16 16:46:58
【问题描述】:
我有一个带有易错初始化器的结构,不是实例方法,而是初始化器。更新到 1.2 后,当我尝试在初始化程序中分配 let 属性时,我收到以下错误 Cannot assign to 'aspectRatio' in self。我的代码如下:
import Foundation
public struct MediaItem
{
public let url: NSURL!
public let aspectRatio: Double
public var description: String { return (url.absoluteString ?? "no url") + " (aspect ratio = \(aspectRatio))" }
// MARK: - Private Implementation
init?(data: NSDictionary?) {
var valid = false
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
valid = true
}
}
}
if !valid {
return nil
}
}
struct TwitterKey {
static let MediaURL = "media_url_https"
static let Width = "sizes.small.w"
static let Height = "sizes.small.h"
}
}
我的问题是我该怎么做才能解决这个问题?
【问题讨论】:
-
这不只是因为您有一个不可变变量(使用
let)并且您分配给它两次(一次在初始化程序中 - 0,另一次在构造函数中) - 确实如果您只在构造函数中分配它并在else中分配 0,它就可以工作? -
@Benjamin,在添加 else 语句并删除初始化程序后,我现在得到了
self used before all stored properties are initialized。 -
@Riley,那个问题和我的有什么区别?我正在使用一个错误的初始化程序,而这个问题不是。
-
赞成提供所有必要的代码,我只需将其复制并粘贴到应用程序中并尝试编译并复制您的问题。我希望每个提出问题的人都这样做。
标签: ios swift initializer