2017-02-14 44 views
0

我試圖在視圖中畫一條線,但是由於可選的類型錯誤,我的代碼無法編譯。我對swift和objective-c很陌生,花了很多時間來搜索答案。目前這個問題還沒有解決。所以,任何人都可以提供一些線索來解決這個問題?可選類型「CGContext?」的值沒有解開

代碼:

import UIKit 

class DrawLines: UIView { 

     // Only override draw() if you perform custom drawing. 
    // An empty implementation adversely affects performance during animation. 
    override func draw(_ rect: CGRect) { 
     //Drawing code 
     // context 
     let context = UIGraphicsGetCurrentContext() 
     CGContextSetLineWidth(context, 3.0) 
     CGContextSetStrokeColorWithColor(context, UIColor.purpleColor().cgColor) 

     //create a path 
     CGContextMoveToPoint(context,0,0) 
     CGContextAddLineToPoint(context,250,320) 

    } 
} 

錯誤:

enter image description here

+1

只需點擊它即可使用** Fix-it **選項。 –

+0

@NiravD謝謝您的回答。它可能通過你的建議來解決問題,但它不能解決我的問題。你能告訴我導致這個問題的原因嗎? – pipi

+0

你是什麼意思,它不能解決我的問題,修復後,它會消除你目前正在得到的錯誤。 –

回答

1

只是被迫解開上下文,它是100%安全的,但只解決了一個問題。

UIGraphicsGetCurrentContext文檔:

The current graphics context is nil by default. Prior to calling its drawRect: method, view objects push a valid context onto the stack, making it current.

在斯威夫特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()行。

+0

我刪除!從UIGraphicsGetCurrentContext的末尾而不是添加?在上下文結束時,程序可以被編譯並運行。如果我嘗試這種方式,有什麼區別嗎? – pipi

+0

尾隨感嘆號不總是不好或不安全。根據文檔,添加感嘆號是絕對安全的。問號可以使其成爲可選項。 – vadian

2

UIGraphicsGetCurrentContext()返回可選的,使用它在你的榜樣,你需要調用context!。 最好的方式來使用它,它敷在IF-讓:

if let context = UIGraphicsGetCurrentContext() { 
    // Use context here 
} 

甚至更​​好的使用保護令:

guard let context = UIGraphicsGetCurrentContext() else { return } 
// Use context here 
+0

使用'UIView'時,上下文保證存在 – vadian

2

在這種情況下,解決方法是讓上下文時使用!

let context = UIGraphicsGetCurrentContext()! 

當沒有當前的上下文,這意味着你做了一些非常錯誤的事情時,應用程序會崩潰。

相關問題