首页 > 其他分享 >Mac开发基础04-第一个Mac项目

Mac开发基础04-第一个Mac项目

时间:2024-07-26 11:19:50浏览次数:17  
标签:macOS 窗口 第一个 04 存储 Mac 应用 按钮 Swift

一、项目创建

创建macOS项目时,在Xcode的项目设置向导中,您会遇到"Interface"、"Language"、和"Storage"等选项。这些选项决定了您项目的基本框架、编程语言以及数据持久化的技术。下面逐一解释这些选项:

Interface

"Interface"(用户界面)选项让您选择创建用户界面的技术。对于macOS项目,主要有以下几种选择:

  • Storyboard:Storyboard是一种可视化工具,允许开发者通过拖拽组件来设计应用的用户界面。它使得视图控制器之间的关系和过渡可以很容易地通过可视化界面来管理。

  • XIB/NIB:XIB文件也是用来设计用户界面的,但是与Storyboard不同的是,XIB通常用于单个视图或窗口。一些开发者更喜欢使用多个XIB文件来管理界面,以减小单个文件的复杂性。

  • SwiftUI:SwiftUI是一种相对较新的界面设计方法,采用声明式Swift语法来创建用户界面。它支持跨平台,能够在所有Apple平台上运行,并提供了数据绑定和响应式编程的特性。选择SwiftUI意味着您的项目会基于SwiftUI框架构建用户界面。

Language

"Language"(编程语言)选项让您选择开发应用时使用的主要编程语言。对于macOS开发,主要有两种选择:

  • Swift:Swift是由苹果开发的现代、安全、高效的编程语言,现在被广泛用于iOS和macOS应用开发。Swift易于学习,且拥有强大的性能和安全特性,是当前最受欢迎的苹果开发语言之一。

  • Objective-C:Objective-C是一种基于C的面向对象语言,加入了Smalltalk式的消息传递机制。它在Swift之前是苹果平台主要的开发语言。尽管Swift现在更受欢迎,但许多旧项目和框架仍然使用Objective-C,学习Objective-C可以帮助您理解和维护这些旧项目。

Storage

"Storage"(存储)选项指的是应用数据存储的技术。在某些模板(如Document-based应用)中,您会遇到选择存储方式的选项,如:

  • Core Data:Core Data是苹果提供的一个强大的框架,用于在本地存储和管理对象图和持久化数据。适用于需要管理复杂数据模型或需要在本地数据库中存储大量数据的应用。

  • CloudKit:CloudKit是苹果的云存储解决方案,允许您将用户数据存储在iCloud中,并在所有用户设备之间进行同步。选择CloudKit意味着您希望应用能够利用云服务来存储和管理数据。

  • 不使用:对于一些应用,可能不需要使用复杂的本地或云存储解决方案。在这种情况下,可以选择不预先集成任何特定的存储技术。

二、建议

作为初学者,在选择Xcode项目的"Interface"、"Language"和"Storage"时,考虑到学习曲线、未来的项目需求以及长期的技术趋势是很重要的。下面是一些建议来帮助你做出决定:

1. Interface(界面)

  • 推荐选择:SwiftUI

原因:SwiftUI是Apple最新推出的UI框架,采用了现代化的声明式编程范式,对初学者更加友好。它的代码更简洁,易于理解和学习,而且SwiftUI是跨平台的,同一套代码可以运行在iOS、macOS、watchOS和tvOS上,这为初学者提供了更广泛的学习和实践机会。

2. Language(语言)

  • 推荐选择:Swift

原因:Swift是Apple推荐的开发语言,它设计简洁、安全且速度快。Swift拥有大量的现代语言特性,如类型推断、内存安全性和函数式编程元素,这些都使得编程更加高效和有趣。随着Swift语言的不断发展,它逐渐成为开发Apple平台应用的首选语言。另外,Swift拥有活跃的开发社区和大量学习资源,对初学者来说是个不错的选择。

3. Storage(存储)

  • 推荐选择:取决于应用需求

原因:选择哪种存储技术主要取决于你的应用需求。如果你是完全的初学者,开始时可能不需要深入到数据持久化的复杂性,可以先跳过或选择"不使用"。

  • 如果你的应用需要存储大量的结构化数据,并且可能需要执行复杂的查询,那么Core Data是个好选择。Core Data 提供了强大的数据管理能力,但它的学习曲线相对较高。可以在了解基础的Swift和UI框架之后,再逐步学习Core Data。

  • 如果你的应用需要在多设备之间同步数据,或希望利用Apple的iCloud服务来存储数据,CloudKit可能更符合需求。CloudKit相对容易上手,特别是对于需要实现数据共享和同步的应用来说。

总结

对于初学者,最关键的是选择一条合适自己的学习路径,然后逐渐深入。我建议从SwiftUI和Swift开始,因为它们为你提供了构建现代、跨平台应用的基础。至于数据存储,你可以根据项目的需要和个人的学习进度稍后再决定。不断实践并尝试新的技术,是提高编程技能的不二法门

三、第一个Mac项目

让我们从一个简单的macOS项目开始,就是创建一个基本的窗口(Window)应用,里面包含一个标签(Label)和一个按钮(Button)。当用户点击按钮时,标签的文字会改变。这个项目将使用Swift语言和AppKit框架。
为了保持简洁,我直接在AppDelegate.swift文件中编写所有代码,实际开发中你可能需要更合理地组织你的代码结构。

AppDelegate.swift

import Cocoa

@main
class AppDelegate: NSObject, NSApplicationDelegate {

    var window: NSWindow!
    var label: NSTextField!
    
    func applicationDidFinishLaunching(_ aNotification: Notification) {
        // 创建一个窗口并设置大小和位置
        window = NSWindow(contentRect: NSMakeRect(200, 200, 480, 300),
                          styleMask: [.titled, .closable, .miniaturizable, .resizable],
                          backing: .buffered, defer: false)
        window.title = "我的第一个macOS应用" // 窗口标题
        window.makeKeyAndOrderFront(nil) // 确保窗口前置显示
        
        // 创建一个标签
        label = NSTextField(labelWithString: "Hello, macOS!")
        label.frame = NSRect(x: 140, y: 150, width: 200, height: 24)
        label.alignment = .center
        window.contentView?.addSubview(label) // 将标签添加到窗口的内容视图中
        
        // 创建一个按钮
        let button = NSButton(title: "点我", target: self, action: #selector(buttonClicked))
        button.frame = NSRect(x: 190, y: 100, width: 100, height: 32)
        window.contentView?.addSubview(button) // 将按钮添加到窗口的内容视图中
    }

    @objc func buttonClicked() {
        label.stringValue = "按钮被点击了!" // 当按钮被点击时,修改标签的文字
    }
}

解读每行代码的作用和原理:

  • import Cocoa:引入Cocoa框架,这是开发macOS应用的基础库。
  • @main:标记AppDelegate类是应用的主入口点。
  • class AppDelegate: NSObject, NSApplicationDelegate {...}:定义了一个名为AppDelegate的类,继承自NSObject,并遵守NSApplicationDelegate协议。
  • var window: NSWindow!var label: NSTextField!:声明了两个可选变量,一个是应用的窗口,另一个是标签,用于在其他函数中访问。
  • func applicationDidFinishLaunching(_ aNotification: Notification):是NSApplicationDelegate协议的一个方法,应用程序启动并初始化完成时会被调用。
  • applicationDidFinishLaunching方法中:
    • 使用NSWindow创建一个新的窗口实例,并通过contentRect设置窗口大小和位置。
    • 设置窗口的styleMask决定窗口的样式(可关闭、可最小化等)。
    • 使用makeKeyAndOrderFront方法将窗口置于前面显示。
    • 通过NSTextField(labelWithString:)创建一个标签,设置其位置、尺寸和对齐方式,并添加到窗口的内容视图上。
    • 创建一个NSButton,设置其标题、目标和动作(当按钮被点击时要执行的方法)。按钮同样被添加到窗口的内容视图上。
  • @objc func buttonClicked():定义了一个动作方法,当按钮被点击时,这个方法会被调用,并改变标签的显示内容。

通过这个基本的例子,你可以看到构建macOS应用的基本结构:创建和配置UI组件(如窗口、标签、按钮),并处理用户事件。

标签:macOS,窗口,第一个,04,存储,Mac,应用,按钮,Swift
From: https://www.cnblogs.com/chglog/p/18324937

相关文章

  • Mac开发基础03-学习大纲
    下面提供一个macOS开发学习大纲。这个大纲将帮助初学者系统地掌握macOS开发的核心知识和技能。macOS开发学习大纲1.macOS基础知识macOS系统架构:了解macOS基本架构,包括kernel、系统框架等。macOS和iOS的异同:对比macOS与iOS,理解两者的设计理念、用户界面与交互的差异。2.开......
  • Mac开发基础01-学前教育
    从iOS开发转型到macOS开发是一个相对平滑的过渡过程,尤其是对于那些已经熟悉Swift或Objective-C、以及Apple的软件开发工具和设计理念的开发者来说。以下几点是关于这一转型过程中的学习曲线的概述:1.语言和工具语言共通性:iOS和macOS开发都可以使用Swift或Objective-C,这意味着你......
  • Mac开发基础02-学习指南
    对于iOS开发者转型成为macOS开发者,以下是一个详细的学习步骤指南。这个过程主要包括了解macOS特有的概念和技术、学习AppKit框架以及熟悉macOS设计准则等关键步骤。1.理解macOS与iOS的区别用户界面与交互:macOS允许更复杂的用户交互,包含鼠标操作、右键点击、拖拽等,而这些在iO......
  • P9304 「DTOI-5」3-1题解,c++树的遍历例题
    题意给定以n(1≤n≤1......
  • 题解:P10043 [CCPC 2023 北京市赛] 广播
    博客使用更佳:Myblog题目传送门这道题是一个标准的dp了,只不过它要倒序来做。还是分三步。初值:初值想必都知道吧,若要求最小值,就把初值设成无穷大,\(dp_{0,i}\)和\(dp_{i,0}\)都要设成\(i\),\(dp_{0,0}\)一定要赋值成\(0\),这是本人亲自犯过的错误QwQ。状态:\(dp_{i,j}......
  • 如何安装mysqlclient 1.4.6? (Python 3.6)MacO?
    我安装pipinstallmysqlclient==1.4.6--no-cache-dir但是出现错误:ld:library'ssl'notfoundclang:error:linkercommandfailedwithexitcode1(use-vtoseeinvocation)error:command'clang'failedwithexitstatus......
  • 仅当 Minicom 在 macOS 上运行时,与 Arduino 的串行通信才有效
    我的macOS系统和Arduino设备之间的串行通信遇到问题。除非minicom正在运行,否则我的Rust和Python脚本都无法向Arduino发送消息。下面是问题的详细描述:问题总结环境:macOS(mac硅胶M3max)、Arduino、Rust、Python串口:/dev/cu.usbmodem101波特率:9......
  • *算法训练(leetcode)第三十一天 | 1049. 最后一块石头的重量 II、494. 目标和、474. 一
    刷题记录*1049.最后一块石头的重量II*494.目标和474.一和零*1049.最后一块石头的重量IIleetcode题目地址本题与分割等和子集类似,要达到碰撞最后的石头重量最小,则尽可能把石头等分为两堆。时间复杂度:O......
  • 第三周DAY04---git
    一、git的主要功能二、安装git[root@git~]#yum-yinstallgit[root@git~]#rpm-ql git查看版本信息[root@git~]#git[root@git~]#mkdir/yy000 创建目录使用git指令,一定要cd到初始化之后的目录cd到yy000目录中使用init指令促使初始化[root@git~]#cd......
  • 设计模式C++004__装饰器模式
    设计模式C++004__装饰器模式在软件组件设计中,如果职责划分不清晰,使用继承得到的结果往往会随着需求的变化,子类急剧膨胀,同时充斥着重复代码,这时候关键是划清责任。单一职责模式分类中的设计模式:装饰器模式,桥模式1、装饰器模式:动机:在某些情况下,我们可能会“过渡地使用继承来扩......