使用 Swift 开发应用程序
使用 Swift 构建应用
Section titled “使用 Swift 构建应用”在本章节中,我们将使用 Swift 和 UIKit 创建两个简单的应用程序,以理解基本的 iOS 开发概念。
第一个应用——“猜数字”
Section titled “第一个应用——“猜数字””我们将构建一个名为“猜数字”的应用。这个应用会生成一个随机数字,用户尝试猜测这个数字。
项目设置:在 Xcode 中创建一个新的 iOS 项目,使用“App”模板,界面选择“Storyboard”,语言选择“Swift”。将其命名为“GuessTheNumber”或类似名称。
界面设置 (Main.storyboard):
- 拖动一个
UILabel到主视图上。将其文本更改为“猜数字 (0-9)”。根据需要调整其字体、颜色和对齐方式。 - 在标签下方拖动一个
UITextField。设置其占位符文本(placeholder text)为“输入你的猜测”。将其键盘类型(keyboard type)设置为“数字键盘”(Number Pad),以便更方便地输入数字。 - 在文本字段下方拖动一个
UIButton。将其标题(title)更改为“猜”。 - 在按钮下方拖动另一个
UILabel。这将显示结果(例如,“你猜对了!”或“错了!”)。清除其初始文本,并确保它有足够的行来显示消息(将 Lines 设置为 0 表示动态高度,设置为 2 表示固定高度)。
您的视图布局现在应该包含一个标题标签、一个输入文本字段、一个猜测按钮和一个结果标签,垂直排列。
将 UI 连接到代码 (ViewController.swift):
使用 Assistant editor(助理编辑器)并排打开 Main.storyboard 和 ViewController.swift 文件。
- 从
UITextField按住 Control 键拖动到您的ViewController.swift文件中,创建一个@IBOutlet(接口生成器出口)。将其命名为guessTextField。 - 从结果
UILabel按住 Control 键拖动,创建一个@IBOutlet。将其命名为resultLabel。 - 从
UIButton按住 Control 键拖动,为“Touch Up Inside”(手指抬起时在内部)事件创建一个@IBAction(接口生成器动作)。将方法命名为guessButtonTapped。
逻辑很简单:应用将生成一个介于 0 和 9 之间(包含 0 和 9)的随机整数。当用户输入数字并点击“猜”按钮时,应用会将用户的输入与随机生成的数字进行比较,并在 resultLabel 中显示相应的消息。
为了生成一个介于 0 和 9 之间的随机数,我们将使用 Swift 的 Int.random(in:) 方法。
// Inside your ViewController class, you might want to generate the number// when the view loads or each time the button is pressed.// For this example, let's generate it inside the button action for simplicity,// meaning a new number is generated for each guess.
// 或者,对于在猜对或重置之前保持不变的数字:// var targetNumber: Int = 0// override func viewDidLoad() {// super.viewDidLoad()// generateNewTargetNumber()// }// func generateNewTargetNumber() {// targetNumber = Int.random(in: 0...9)// }核心逻辑将在 guessButtonTapped 动作方法内部实现。
@IBAction func guessButtonTapped(_ sender: UIButton) { let randomNumber = Int.random(in: 0...9) // 每次点击生成一个新的随机数
guard let userInputText = guessTextField.text, !userInputText.isEmpty else { resultLabel.text = "Please enter a number." return }
guard let userGuess = Int(userInputText) else { resultLabel.text = "Invalid input. Please enter a whole number." return }
if userGuess == randomNumber { resultLabel.text = "You're right! The number was \(randomNumber)." resultLabel.textColor = .systemGreen } else { resultLabel.text = "Wrong! It was \(randomNumber). Try again!" resultLabel.textColor = .systemRed }
// 可选:猜测后清空文本字段 // guessTextField.text = ""}您的 guessButtonTapped 函数现在应该包含这些逻辑。此设置演示了基本的 UI 交互、输入处理和条件逻辑。
运行应用: 构建并在模拟器或设备上运行您的应用。您应该看到设计的 UI。在文本字段中输入一个数字,然后点击“猜”。结果标签将相应更新。
例如,如果您输入“5”,随机数是 7,标签可能会显示“错了!它是 7。再试一次!”。如果您输入“3”,随机数也是 3,它将显示“你猜对了!数字是 3。”
至此,“猜数字”应用完成。尝试修改它,也许可以限制猜测次数或提供提示。
第二个应用——“是不是质数?”
Section titled “第二个应用——“是不是质数?””在此应用中,用户将输入一个数字,应用将判断它是否为质数(素数)。
- 项目设置:创建一个与第一个应用类似的新 iOS 项目,命名为“IsItPrime”。
- 界面布局:UI 将类似于“猜数字”应用:一个
UILabel用于说明(例如,“输入一个数字检查它是否为质数”),一个UITextField用于数字输入(将键盘设置为数字键盘),一个UIButton(例如,“检查质数”),以及另一个UILabel用于显示结果。 - 连接 UI 到代码:为文本字段(
numberTextField)和结果标签(primeResultLabel)创建@IBOutlet,为按钮(checkPrimeButtonTapped)创建一个@IBAction。
视觉布局将包含一个标题、一个用于输入数字的字段、一个用于触发检查的按钮以及一个标签,用于显示输入的数字是否为质数。
质数测试的逻辑是什么?
Section titled “质数测试的逻辑是什么?”质数是一个大于 1 的自然数,除了 1 和它本身之外没有其他正约数。 示例:2、3、5、7、11 是质数。4 (2x2)、6 (2x3)、1 (根据定义) 不是质数。
算法:
- 处理边界情况:小于 2 的数字不是质数。
- 数字 2 是最小的质数。
- 对于大于 2 的数字,检查从 2 到该数字平方根之间的数是否能整除它。如果能被此范围内的任何数整除,则它不是质数。如果找不到约数,则它是质数。
实现质数测试
Section titled “实现质数测试”核心逻辑将在 checkPrimeButtonTapped 动作方法和一个辅助函数中实现。
// 用于检查是否为质数的辅助函数func isPrime(_ number: Int) -> Bool { if number <= 1 { return false } // 小于或等于 1 的数字不是质数 if number <= 3 { return true } // 2 和 3 是质数 if number % 2 == 0 || number % 3 == 0 { return false } // 排除 2 和 3 的倍数
var i = 5 while i * i <= number { if number % i == 0 || number % (i + 2) == 0 { return false } i += 6 } return true}
@IBAction func checkPrimeButtonTapped(_ sender: UIButton) { guard let inputText = numberTextField.text, !inputText.isEmpty else { primeResultLabel.text = "Please enter a number." return }
guard let number = Int(inputText) else { primeResultLabel.text = "Invalid input. Please enter a whole number." return }
if isPrime(number) { primeResultLabel.text = "\(number) is a prime number!" primeResultLabel.textColor = .systemGreen } else { primeResultLabel.text = "\(number) is not a prime number." primeResultLabel.textColor = .systemRed }}checkPrimeButtonTapped 函数将解析输入,调用 isPrime 辅助函数,并更新 primeResultLabel 以显示结果。isPrime 函数包含了用于判断是否为质数的优化逻辑。
运行应用: 构建并运行“IsItPrime”应用。输入各种数字(例如 1、2、7、10、29、99)来测试其功能。结果标签应根据数字是否为质数而正确更新。
例如,输入“29”应该显示“29 是质数!”,而输入“10”应该显示“10 不是质数。”