我尝试在视图中绘制一条线,但由于可选的类型错误,我的代码无法编译。我是一个快速和客观的新手,并花了很多时间来搜索答案。到目前为止,这个问题没有解决。那么,任何人都可以提供一些线索来解决这个问题吗?
代码:
type Chart struct {
ID int `json:"id,omitempty" db:"id"`
Name string `json:"name,omitempty" db:"name"`
Type string `json:"type,omitempty" db:"type"`
DashboardID int `json:"dashboard_id,omitempty"`
SourceType string `json:"source_type,omitempty" db:"source_type"`
Data json.RawMessage `json:"graph_data,ommitempty"`
}
func main() {
chart := Chart{}
chart.ID = 1
chart.Name = "Jishnu"
str, err := json.Marshal(chart)
fmt.Println(err)
}
错误:
答案 0 :(得分:2)
UIGraphicsGetCurrentContext()返回可选项,要在您的示例中使用它,您需要调用context!
。
使用它的最佳方式是将它包装在if-let中:
if let context = UIGraphicsGetCurrentContext() {
// Use context here
}
甚至更好地使用后卫:
guard let context = UIGraphicsGetCurrentContext() else { return }
// Use context here
答案 1 :(得分:2)
在这种情况下,解决方案是在获取上下文时使用!
:
let context = UIGraphicsGetCurrentContext()!
当没有当前上下文时,应用程序将崩溃,这意味着您已经做了一些非常错误的事情。
答案 2 :(得分:2)
只是强行解开上下文,它是100%安全但只能解决一个问题。
来自UIGraphicsGetCurrentContext的文档:
默认情况下,当前图形上下文为
nil
。 在调用其drawRect:
方法之前,视图对象会将有效的上下文推送到堆栈,使其成为当前。
在Swift 3中(假设来自draw
签名),图形语法发生了显着变化:
class DrawLines: UIView {
override func draw(_ rect: CGRect) {
let context = UIGraphicsGetCurrentContext()!
context.setLineWidth(3.0)
context.setStrokeColor(UIColor.purple.cgColor)
//create a path
// context.beginPath()
context.move(to: CGPoint())
context.addLine(to: CGPoint(x:250, y:320))
// context.strokePath()
}
}
PS:但要绘制线条,您应取消注释beginPath()
和strokePath()
行。