.1 Giao diện chức năng bổ sung

Một phần của tài liệu Giáo trình lập trình di động trên iOS Dành cho bậc Cao đẳng (Trang 74 - 76)

Bài tập: Hãy điều chỉnh lớp CalculatorBrain sao cho có thể thực hiện cho tất cả các

Tổ chức hoạt động: Tìm giải pháp thực hiện cho phép tốn hai ngơi! Gợi ý:

Với phép tốn hai ngơi, cơng việc sẽ phức tạp hơn nhiều do chúng cần phải thực hiện qua hai bước đó là nhập tốn hạng thứ nhất và nhập phép tốn sau đó nhập tiếp tốn hạng thứ hai và phím “=” thì Calculator sẽ thực hiện và cho ra kết quả. Do lớp CalculatorBrain chỉ chứa một biến để lưu giá trị hiện tại trên màn hình của máy tính (biến accumulator) nên khi người dùng nhập tốn hạng thứ 2 của phép tốn hai ngơi, thì tốn hạng thứ nhất sẽ bị mất đi. Do vậy trong trường hợp này ta cần một cấu trúc dữ liệu để lưu lại trạng thái của máy tính trước đó (toán hạng 1, tên của hàm được gọi) đồng thời có một phương thức để thực hiện phép tốn này với tốn hạng thứ 2.

Với những phân tích đó, rõ ràng ở đây ta cần dùng một struct hoặc một class để thực hiện. Trong trường hợp này ta dùng struct:

//Struct to store information of binaryOperations private struct PendingBinaryOperation {

// Store the function

let theBinaryFunction: (Double, Double) -> Double // Store the first operand

let theFisrtOperand: Double

// Function to perform the function with the second operand func performCalculate(secondOperand: Double) -> Double { return theBinaryFunction(theFisrtOperand, secondOperand) }

}

private var storeForBinaryFunctions: PendingBinaryOperation?

Và hàm requestCalculate được thay đổi như sau: // To perform the requested Calculation func requestCalculate(mathSymbol: String) {

if let mathOperation = operations[mathSymbol] { switch mathOperation {

case .constant(let constantValue): accumulator = constantValue

case .unaryOperation(let mathFuncion): if let operand = accumulator {

accumulator = mathFuncion(operand) }

case .binaryOperation(let mathFunction): if let firstOperand = accumulator { storeForBinaryFunctions =

PendingBinaryOperation(theBinaryFunction: mathFunction, theFisrtOperand: firstOperand) }

68

if storeForBinaryFunctions != nil && accumulator != nil { accumulator = storeForBinaryFunctions?.performCalculate( secondOperand: accumulator!) storeForBinaryFunctions = nil } } } }

Bài tập: Hãy điều chỉnh cấu trúc enum và cấu trúc Dictionary để hoàn thiện chương

trình và máy tính hoạt động bình thường với tất cả các chức năng trên giao diện.

2.4 Autolayout trong iOS

2.4.1 Vấn đề giao diện trong ứng dụng Calculate

Hãy xoay màn hình máy ảo, dễ nhận thấy giao diện ứng dụng khơng cịn như mong muốn (Hình 2.4.1.1), hoặc đơi khi giao diện bị vỡ khơng thể nhìn (nếu ứng dụng sử dụng các loại hình ảnh với kích thước khác nhau…).

Một phần của tài liệu Giáo trình lập trình di động trên iOS Dành cho bậc Cao đẳng (Trang 74 - 76)

Tải bản đầy đủ (PDF)

(137 trang)