readLine () возвращает необязательную строку. Чтобы развернуть опционально, в swift есть пара опций, я думаю, там есть три опции. Один - принудительное развертывание, второй - необязательная цепочка, а третий - оператором guard . Здесь, в приведенной ниже опции, я использовал необязательную цепочку, чтобы развернуть необязательную строку, возвращаемую redLine () . Попробуйте это:
if let typed = readLine() {
if let num = Int(typed) {
if num % 2 == 0 {
print("This number is even.")
}
else {
print("This number is odd.")
}
}
} else {
print("Please enter a valid number")
}
Я не получил берущих и в конечном счете понял это.
Ответ должен следить за развитием события QueryContinueDrag. Это событие стреляет постоянно во время операции отбрасывания перетаскивания. QueryContinueDragEventArgs содержат свойство Action перечисления типа DragAction, который является любой DragAction. Отмена, DragAction. Отбрасывание или DragAction. Продолжить. Это - свойство чтения/записи, чтобы позволить Вам изменять стандартное поведение (нам не нужно это).
Этот пример кода предполагает, что флаг DragDropInProgress установлен в начале отбрасывания перетаскивания и сброшен, когда отбрасывание перетаскивания завершается успешно. Это ловит окончание DragDrop, потому что пользователь отпустил мыши, не будучи по цели отбрасывания перетаскивания (цели отбрасывания перетаскивания являются MyControl1 и MyControl2), или отменяет отбрасывание перетаскивания. Если Вы не заботитесь, сбрасывается ли DragDropInProgressFlag перед Вашими огнями событий DragDrop можно обойтись без теста хита и просто сбросить флаг.
Private Sub MyControl_QueryContinueDrag(ByVal sender As Object, ByVal e As System.Windows.Forms.QueryContinueDragEventArgs) Handles MyControl.QueryContinueDrag
Dim MousePointerLocation As Point = MousePosition
If e.Action = DragAction.Cancel Then '' User pressed the Escape button
DragDropInProgressFlag = False
End If
If e.Action = DragAction.Drop Then
If Not HitTest(new {MyControl1, MyControl2}, MousePointerLocation) Then
DragDropInProgressFlag = False
End If
End If
End Sub
Private Function HitTest(ByVal ctls() As Control, ByVal p As Point) As Boolean
HitTest = False
For Each ctl In ctls
Dim ClientPoint As Point = ctl.PointToClient(p)
HitTest = HitTest Or (ClientPoint.X >= 0 AndAlso ClientPoint.Y >= 0 AndAlso ClientPoint.X <= ctl.Width AndAlso ClientPoint.Y <= ctl.Height)
If HitTest Then Exit For
Next
End Function
В этом примере HitTest является rountine, который берет Положение мыши (экранная координата) и массив средств управления и отсеивает через массив, передающий Верный, если положение мыши находится в каком-либо из прямоугольников средств управления.