Swift-19-基础入门

这篇具有很好参考价值的文章主要介绍了Swift-19-基础入门。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

从本章开始大概用10篇左右文章介绍下Swift语言的基本用法。

简介

Objective-C作为一门比较老的语言, 缺少很多现代语言所具备的高级特性。Swift是目标是比C,C++, ObjC更安全可靠,从而减少开发者对在应用运行时出错的代码进行调试的时间成本。本系列课程做为Mac OS应用开发的一个子专题,在这个专题中笔者会详细介绍下Swift程序语法。

在同一项目中这两种语言可以同时汇编,正常情况下这两种语言可以相互调用,从Swift调用ObjectiveC时兼容性比较好,反之有些会出现一些问题,但还是不太建议在同一个项目中同时使用两种语言来开发。

如果您对ObjectiveC非常了解的话,建议对照着来学习,这样会更容易理解,也有助于您对这两种不同语言的把控。

目录大纲

下面是一个拟的一个大纲,暂时不包含SwiftUI的内容。

  1. 工具和语法:工具和类型
  2. 基础知识:条件语句、数、switch、循环、字符串、空类型、
  3. 容器和函数:数组、字典、集合、函数、闭包
  4. 枚举、结构体和类:枚举、结构体和类、属性、初始化、值类型和引用类型
  5. 高级编程:协议、异常、扩展、泛型、内存管理
  6. 事件驱动的应用:Cocoa应用、IOS应用

创建简单工程

此专题的学习中,我们还是使用XCode工具,笔者的Xcode版本为Version 13.4.1 (13F100),不同的XCode版本的界面会有少许的变化,文中的截图可能略有差异,但应该变化不大。

创建playground工程

Xcode提供了下类似python语言的Jutyper Notebook功能,叫做playground,整个基础部分都会使用playground来学习。在Xcode中会有4个选项,一般选择Blank即可:
Swift-19-基础入门,MacOS,swift,蓝桥杯,开发语言,objective-c,xcode,macos,ios

  • blank:空白文档,只引入了最基础的Cocoa框架;
  • Game:引入了游戏套件,省去了从blank文档创建基础框架的过程;
  • Map:引入了地图套件,目的同Game一样;
  • Single View:引入了SwiftUI套件,学习SwiftUI时使用;

创建好后,主界面如下:
Swift-19-基础入门,MacOS,swift,蓝桥杯,开发语言,objective-c,xcode,macos,ios
界面非常简单,从左到右依次是:源文件浏览区、源码编辑区、运行结果区;

import Cocoa

var greeting = "Hello, playground"

多说一点,playground工程也不单单只是一个文件,它也是一种多文件的组合,只是对外暴露出了一个接口,打开包以后可看到它里面也包含了一系列的目录和文件:
Swift-19-基础入门,MacOS,swift,蓝桥杯,开发语言,objective-c,xcode,macos,ios

创建Command Line Tool工程

如果您不喜欢playground,也可以使用project的方式来练习本专题的代码,区别不大。方法是在XCode工具中选择新建Command Line Tool模板,然后按如下界面配置。
Swift-19-基础入门,MacOS,swift,蓝桥杯,开发语言,objective-c,xcode,macos,ios
在创建工程时注意选择工程类型和编程语言,界面如下:
Swift-19-基础入门,MacOS,swift,蓝桥杯,开发语言,objective-c,xcode,macos,ios
main.swift:程序运行主函数,默认只有两行代码

import Foundation

print("Hello, World!")
  1. 两种工程不同的示例中的import引用不一样,这个关系不大,因为Cocoa包含了Function框架;而在基础部分我们也只会用到Function框架提供的API;
  2. 在本系列专题中笔者会使用 playground 工程来讲述Swift编程的知识,原因是可以省略好多print()函数;

Swift语言比较恶心的一点是对于每行语句最后的 ;分号并不敏感,纯靠缩进来识别代码,做为一个老java程序员对这一点确实是习惯了好长的时间,估计是从python语言学来的吧。

创建OSX应用

创建一个可编辑的文本应用

创建工程

Swift-19-基础入门,MacOS,swift,蓝桥杯,开发语言,objective-c,xcode,macos,ios

  • 开发语言选择:swift
  • UI选择:storyboards

创建好后工程结构,默认是一种MVC架构的工程模式。
Swift-19-基础入门,MacOS,swift,蓝桥杯,开发语言,objective-c,xcode,macos,ios

  • AppDelegate.swift:入口程序
  • ViewController.swift:视图控制器,相当于Controller
  • Document.swift:相当于Model
  • Assets.xcassets:应用图标和图片资源库
  • Main.storyboard:UI图形界面,相当于View
  • Info.plist:应用设置
  • swift2cocoa.entitlements:应用发布和运行设置

准备工作

设计UI界面

打开 Main.storyboard 文件。
Swift-19-基础入门,MacOS,swift,蓝桥杯,开发语言,objective-c,xcode,macos,ios

拖动UI控件到设计面板上
Swift-19-基础入门,MacOS,swift,蓝桥杯,开发语言,objective-c,xcode,macos,ios

设计视图控制器

添加一个文本和两个按钮事件

import Cocoa

class ViewController: NSViewController {

    @IBOutlet var textView: NSTextView!
    
    @IBAction func speakButtonClicked(_ sender: NSButton){
        print("The speak button was clicked")
    }
    
    @IBAction func stopButtonClicked(_ sender: NSButton){
        print("The stop button was clicked")
    }

}

连接控件

方法有很多,主要是拖动,其中一种拖动方式如下图所示:
Swift-19-基础入门,MacOS,swift,蓝桥杯,开发语言,objective-c,xcode,macos,ios
另一个拖动方式,把控件拖到controller上面
Swift-19-基础入门,MacOS,swift,蓝桥杯,开发语言,objective-c,xcode,macos,ios

添加功能

语音朗读

修改Controller代码

class ViewController: NSViewController {

    @IBOutlet var textView: NSTextView!
    
    let speechSynthesizer = NSSpeechSynthesizer()
    
   var contents:String?{
        get{
            return  textView.string
        }
        set{
            textView.string = newValue ?? ""
        }
    }
    
    @IBAction func speakButtonClick(_ sender:NSButton){
        if(!textView.string.isEmpty){
            speechSyntheesizer.startSpeaking(textView.string)
        }else{
            speechSyntheesizer.startSpeaking("文档是空的")
            
        }
    }
    
    @IBAction func stopButtonClicked(_ sender: NSButton){
        speechSynthesizer.stopSpeaking()
    }

}

文档保存

这里稍整理下代码,把M和C串起来文章来源地址https://www.toymoban.com/news/detail-859446.html

Controller
import Cocoa

class ViewController: NSViewController {

    @IBOutlet var textView: NSTextView!
    
    var contents: String? {
        get {
            return textView.string
        }
        set {
            textView.string = newValue
        }
    }
    
    let speechSynthesizer = NSSpeechSynthesizer()
    
    @IBAction func speakButtonClicked(_ sender: NSButton){
        speechSynthesizer.startSpeaking(textView.string)
    }
    
    @IBAction func stopButtonClicked(_ sender: NSButton){
        speechSynthesizer.stopSpeaking()
    }

}
Document
import Cocoa

class Document: NSDocument {

    override init() {
        super.init()
    }
    
    enum Error: Swift.Error, LocalizedError {
        case UTF8Encoding
        case UTF8Decoding

        var failureReason: String? {
            switch self {
            case .UTF8Encoding: return "File cannot be encoded in UTF-8."
            case .UTF8Decoding: return "File is not valid UTF-8."
            }
        }
    }
    
    //文本内容
    var contents: String = ""

    //自动保存功能
    override class var autosavesInPlace: Bool {
        return true
    }

    //创建新文档或打开旧文档时调用,负责设置NSWindowController, as!是一个类型转符,相当于强转
    override func makeWindowControllers() {
        let storyboard = NSStoryboard(name: NSStoryboard.Name("Main"), bundle: nil)
        //因为withIdentifier会返回很多不同的controller,所以这块需要强转一下
        let windowController = storyboard.instantiateController(withIdentifier: NSStoryboard.SceneIdentifier("Document Window Controller")) as! NSWindowController
        
        //连接controller
        let viewController = windowController.contentViewController as! ViewController
        viewController.contents = contents
        
        self.addWindowController(windowController)
    }

    //保存文档时调用
    override func data(ofType typeName: String) throws -> Data {
        let windowController = windowControllers[0]
        let viewController = windowController.contentViewController as! ViewController
        let contents = viewController.contents ?? ""

        guard let data = contents.data(using: .utf8) else {
            throw Document.Error.UTF8Encoding
        }

        return data
    }

    override func read(from data: Data, ofType typeName: String) throws {
        guard let contents = String(data: data, encoding: .utf8) else {
            throw Document.Error.UTF8Decoding
        }
        self.contents = contents
    }
}

到了这里,关于Swift-19-基础入门的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Swift入门基础:构造函数、下标、计算属性

    前文介绍了可选类型和闭包,这两个概念在做Object-C时没有遇到,转做Swift又必须面对的。当然除了上述两个概念外,还有构造函数、下标、计算属性等等。这次我们就分别介绍下。   构造函数 构造函数是一种特殊的函数,主要用途是在创建对象时,初始化对象和分配空间,

    2024年01月17日
    浏览(65)
  • iOS开发Swift-基础部分

    系统可通过赋初始值进行自动推断。 平时可加可不加,同一行中有两句话必须加。 Int           UInt(最好不用) Double 64位 很大/高精度情况下使用 15位小数 Float 32位 对精度要求不高的情况下用 6位小数 十进制数   17 二进制 0b前缀 0b10001 八进制 0o前缀 0o21 十六进制 0x前缀

    2024年02月11日
    浏览(55)
  • iOS(一):Swift纯代码模式iOS开发入门教程

    1.修改 AppDelegate.swift 和 ViewController.swift 文件 2.删除 SceneDelegate.swift 和 Main.storyboard 文件 3.修改如图所示项 安装 CocoaPods 初始化项目(添加 Podfile 配置文件) 修改 Podfile 文件 安装 打开 ExDemoApp.xcworkspace 项目并向 ViewController.swift 添加示例代码 运行效果 安装 QMUIKit 方式一:触发

    2024年02月09日
    浏览(45)
  • Swift 单元测试入门

    含义:编程语言中的单元测试是为了确保编写的代码按预期工作。 给定一个特定的输入,希望代码带有一个特定的输出。通过测试代码,能够给当前的重构和发布建立信心,因为将能够确保代码在成功运行的测试套件后按预期工作。 单元测试是运行和验证一段代码(称为“

    2024年02月11日
    浏览(30)
  • swift基础语法

    参考教程 https://www.runoob.com/swift/swift-data-types.html swift代码规范 https://juejin.cn/post/7129465308376465422 必须要有苹果电脑且安装Xcode Swift是类型安全的语言,编译时会进行类型检查 可以使用 import 语句引入任何的Objective-C(C语言的严格超集) 创建macOS playground则引入Cocoa,Cocoa由Objec

    2024年01月21日
    浏览(47)
  • Swift基础

    本文是个比较简单的学习笔记,更详细的内容见 Swift官方文档 Swift标准库用 和 == 运算符定义了 、=、=,所以实现 Comparable 的 运算符就会自动得到这些运算符的实现,实际上 Comparable 继承自 Equatable,所以 == 运算也是必须实现的,以下是示例代码 虽然是讲继承,但代码中的注

    2024年02月07日
    浏览(39)
  • Swift学习笔记(一)基础语法

    浅学一下Swift,这篇笔记做个记录 依然是Xcode,关于Xcode就不多介绍了。 let和var分别用来表示常量和变量,无论是let还是var,作用都是为某个具体量值取了一个名字,这种方式叫做量值的声明。在量值的有效作用域内,开发者可以使用这些名称来获取具体的量值

    2024年01月17日
    浏览(45)
  • iOS开发Swift-枚举

    枚举:一组相关的值定义了一个共同的类型,使你可以在代码中以类型安全的方式来使用这些值。 原始值:定义枚举时被预先填充的值。 (1)整数为原始值时,隐式赋值递增1。未设置原始值时,默认为0,之后递增1. (2)字符串为原始值,隐式赋值为枚举成员的名称。

    2024年02月11日
    浏览(53)
  • iOS开发Swift-闭包

    将很长的闭包表达式作为最后一个参数传递给函数,不用写出他的参数标签。 嵌套函数可捕获其外部函数所有参数、变量、常量。 当一个闭包作为一个参数传到一个函数中,但闭包在函数返回之后才被执行,则称闭包逃逸。 标注@escaping,表示允许闭包逃逸。  包装传递给函数

    2024年02月11日
    浏览(60)
  • iOS开发Swift-函数

     (1)无参函数 (2)多参函数 (3)无返回值 (4)多重返回值 (5)可选元组返回类型(元组可以是nil) (6)隐式返回的函数 任一可以被写成一行return的函数,return(x) + for。 调用的时候: 方法名(for: 参数) (1)指定参数标签 (2)忽略参数标签 (3)默认参数值 (4)可变参数 一个可变参数可接受0个或多

    2024年02月11日
    浏览(52)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包