前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >在 SwiftUI 视图中打开 URL 的若干方法

在 SwiftUI 视图中打开 URL 的若干方法

作者头像
东坡肘子
发布于 2022-07-28 05:13:52
发布于 2022-07-28 05:13:52
8.2K00
代码可运行
举报
运行总次数:0
代码可运行

访问我的博客 www.fatbobman.com[1] 可以获得更好的阅读体验

本文将介绍在 SwiftUI 视图中打开 URL 的若干种方式,其他的内容还包括如何自动识别文本中的内容并为其转换为可点击链接,以及如何自定义打开 URL 前后的行为等。

本文的范例代码是在 Swift Playgrounds 4.1 ( macOS 版本 )中完成的,可在 此处下载[2]。了解更多有关 Swift Playgrounds 的内容,可以参阅 Swift Playgrounds 4 娱乐还是生产力[3] 一文。

image-20220520182722773

SwiftUI 1.0( iOS 13、Catalina )

在视图中,开发者通常需要处理两种不同的打开 URL 的情况:

  • 点击一个按钮( 或类似的部件 )打开指定的 URL
  • 将文本中的部分内容变成可点击区域,点击后打开指定的 URL

遗憾的是,1.0 时代的 SwiftUI 还相当稚嫩,没有提供任何原生的方法来应对上述两种场景。

对于第一种场景,常见的做法为:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// iOS
Button("Wikipedia"){
    UIApplication.shared.open(URL(string:"https://www.wikipedia.org")!)
}

// macOS
Button("Wikipedia"){
    NSWorkspace.shared.open(URL(string:"https://www.wikipedia.org")!)
}

而第二种场景实现起来就相当地麻烦,需要包装 UITextView( 或 UILabel )并配合 NSAttributedString 一起来完成,此时 SwiftUI 仅被当作一个布局工具而已。

SwiftUI 2.0( iOS 14、Big sur )

SwiftUI 2.0 为第一个场景提供了相当完美的原生方案,但仍无法通过原生的方式来处理第二种场景。

openURL

openURL 是 SwiftUI 2.0 中新增的一个环境值( EnvironmentValue ),它有两个作用:

  • 通过调用它的 callFunction 方法,实现打开 URL 的动作

此时在 Button 中,我们可以直接通过 openURL 来完成在 SwiftUI 1.0 版本中通过调用其他框架 API 才能完成的工作。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
struct Demo: View {
    @Environment(\.openURL) private var openURL // 引入环境值

    var body: some View {
        Button {
            if let url = URL(string: "https://www.example.com") {
                openURL(url) { accepted in  //  通过设置 completion 闭包,可以检查是否已完成 URL 的开启。状态由 OpenURLAction 提供
                    print(accepted ? "Success" : "Failure")
                }
            }
        } label: {
            Label("Get Help", systemImage: "person.fill.questionmark")
        }
    }
}
  • 通过提供 OpenURLAction ,自定义通过 openURL 打开链接的行为(后文中详细说明)

Link

SwiftUI 2.0 提供了一个结合 Button 和 openURL 的 Link 控件,帮助开发者进一步简化代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Link(destination: URL(string: "mailto://feedback@fatbobman.com")!, label: {
    Image(systemName: "envelope.fill")
    Text("发邮件")
})

SwiftUI 3.0( iOS 15、Monterey )

3.0 时代,随着 Text 功能的增强和 AttributedString 的出现,SwiftUI 终于补上了另一个短板 —— 将文本中的部分内容变成可点击区域,点击后打开指定的 URL。

Text 用例 1 :自动识别 LocalizedStringKey 中的 URL

通过支持 LocalizedStringKey 的构造方法创建的 Text ,会自动识别文本中的网址( 开发者无须做任何设定),点击后会打开对应的 URL 。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Text("www.wikipedia.org 13900000000 feedback@fatbobman.com") // 默认使用参数类型为 LocalizedStringKey 的构造器

image-20220520141225595

此种方法只能识别网络地址( 网页地址、邮件地址等 ),因此代码中的电话号码无法自动识别。

请注意,下面的代码使用的是参数类型为 String 的构造器,因此 Text 将无法自动识别内容中的 URL :

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
let text = "www.wikipedia.org 13900000000 feedback@fatbobman.com" // 类型为 String
Text(text) // 参数类型为 String 的构造器不支持自动识别

Text 用例 2 :识别 Markdown 语法中的 URL 标记

SwiftUI 3.0 的 Text ,当内容类型为 LocalizedStringKey 时,Text 可以对部分 Markdown 语法标记进行解析 :

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Text("[Wikipedia](https://www.wikipedia.org "Wikipedia") ~~Hi~~ [13900000000](tel://13900000000 "13900000000")")

在这种方式下,我们可以使用任何种类的 URI (不限于网络),比如代码中的拨打电话。

image-20220522085352243

Text 用例 3 :包含 link 信息的 AttributedString

在 WWDC 2021 上,苹果推出了 NSAttributedString 的值类型版本 AttributedString, 并且可以直接使用在 Text 中。通过在 AttributedString 中为不同位置的文字设置不同的属性,从而实现在 Text 中打开 URL 的功能。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
let attributedString:AttributedString = {
    var fatbobman = AttributedString("肘子的 Swift 记事本")
    fatbobman.link = URL(string: "https://www.fatbobman.com")!
    fatbobman.font = .title
    fatbobman.foregroundColor = .green // link 不为 nil 的 Run,将自动屏蔽自定义的前景色和下划线
    var tel = AttributedString("电话号码")
    tel.link = URL(string:"tel://13900000000")
    tel.backgroundColor = .yellow
    var and = AttributedString(" and ")
    and.foregroundColor = .red
    return fatbobman + and + tel
}()

Text(attributedString)

image-20220520144103395

更多有关 AttributedString 的内容,请参阅 AttributedString——不仅仅让文字更漂亮[4]

Text 用例 4 :识别字符串中的 URL 信息,并转换成 AttributedString

上述 3 个用例中,除了用例 1可以自动识别文字中的网络地址外,其他两个用例都需要开发者通过某种方式显式添加 URL 信息。

开发者可以通过使用 NSDataDetector + AttributedString 的组合,从而实现类似系统信息、邮件、微信 app 那样,对文字中的不同类型的内容进行自动识别,并设置对应的 URL。

NSDataDetector[5] 是 NSRegularExpression 的子类,它可以检测自然语言文本中的半结构化信息,如日期、地址、链接、电话号码、交通信息等内容,它被广泛应用于苹果提供的各种系统应用中。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
let text = "https://www.wikipedia.org 13900000000 feedback@fatbobman.com"
// 设定需要识别的类型
let types = NSTextCheckingResult.CheckingType.link.rawValue | NSTextCheckingResult.CheckingType.phoneNumber.rawValue
// 创建识别器
let detector = try! NSDataDetector(types: types)
// 获取识别结果
let matches = detector.matches(in: text, options: [], range: NSRange(location: 0, length: text.count))
// 逐个处理检查结果
for match in matches {
    if match.resultType == .date {
        ...
    }
}

你可以将 NSDataDetector 视为拥有极高复杂度的正则表达式封装套件。

完整的代码如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
extension String {
    func toDetectedAttributedString() -> AttributedString {

        var attributedString = AttributedString(self)

        let types = NSTextCheckingResult.CheckingType.link.rawValue | NSTextCheckingResult.CheckingType.phoneNumber.rawValue

        guard let detector = try? NSDataDetector(types: types) else {
            return attributedString
        }

        let matches = detector.matches(in: self, options: [], range: NSRange(location: 0, length: count))

        for match in matches {
            let range = match.range
            let startIndex = attributedString.index(attributedString.startIndex, offsetByCharacters: range.lowerBound)
            let endIndex = attributedString.index(startIndex, offsetByCharacters: range.length)
            // 为 link 设置 url
            if match.resultType == .link, let url = match.url {
                attributedString[startIndex..<endIndex].link = url
                // 如果是邮件,设置背景色
                if url.scheme == "mailto" {
                attributedString[startIndex..<endIndex].backgroundColor = .red.opacity(0.3)
                }
            }
            // 为 电话号码 设置 url
            if match.resultType == .phoneNumber, let phoneNumber = match.phoneNumber {
                let url = URL(string: "tel:\(phoneNumber)")
                attributedString[startIndex..<endIndex].link = url
            }
        }
        return attributedString
    }
}

Text("https://www.wikipedia.org 13900000000 feedback@fatbobman.com".toDetectedAttributedString())

image-20220520150754052

自定义 Text 中链接的颜色

遗憾的是,即使我们已经为 AttributedString 设置了前景色,但当某段文字的 link 属性非 nil 时,Text 将自动忽略它的前景色和下划线设定,使用系统默认的 link 渲染设定来显示。

目前可以通过设置着色来改变 Text 中全部的 link 颜色:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Text("www.wikipedia.org 13900000000 feedback@fatbobman.com")
    .tint(.green)

Link("Wikipedia", destination: URL(string: "https://www.wikipedia.org")!)
    .tint(.pink)

image-20220520151737202

相较 Text 中链接的固定样式,可以用 Button 或 Link 创建可以自由定制外观的链接按钮:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Button(action: {
    openURL(URL(string: "https://www.wikipedia.org")!)
}, label: {
    Circle().fill(.angularGradient(.init(colors: [.red,.orange,.pink]), center: .center, startAngle: .degrees(0), endAngle: .degrees(360)))
})

image-20220520164125700

自定义 openURL 的行为

在 Button 中,我们可以通过在闭包中添加逻辑代码,自定义开启 URL 之前与之后的行为。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Button("打开网页") {
            if let url = URL(string: "https://www.example.com") {
                // 开启 URL 前的行为
                print(url)
                openURL(url) { accepted in  //  通过设置 completion 闭包,定义点击 URL 后的行为
                    print(accepted ? "Open success" : "Open failure")
                }
            }
}

但在 Link 和 Text 中,我们则需要通过为环境值 openURL 提供 OpenURLAction 处理代码的方式来实现自定义打开链接的行为。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Text("Visit [Example Company](https://www.example.com "Example Company") for details.")
    .environment(\.openURL, OpenURLAction { url in
        handleURL(url)
        return .handled
    })

OpenURLAction 的结构如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public struct OpenURLAction {
    @available(iOS 15.0, macOS 12.0, tvOS 15.0, watchOS 8.0, *)
    public init(handler: @escaping (URL) -> OpenURLAction.Result)

    public struct Result {
        public static let handled: OpenURLAction.Result  // 当前的代码已处理该 URL ,调用行为不会再向下传递
        public static let discarded: OpenURLAction.Result  // 当前的处理代码将丢弃该 URL ,调用行为不会再向下传递
        public static let systemAction: OpenURLAction.Result  // 当前代码不处理,调用行为向下传递( 如果外层没有用户的自定义 OpenURLAction ,则使用系统默认的实现)
        public static func systemAction(_ url: URL) -> OpenURLAction.Result  // 当前代码不处理,将新的 URL 向下传递( 如果外层没有用户的自定义 OpenURLAction ,则使用系统默认的实现)
    }
}

比如:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Text("www.fatbobman.com feedback@fatbobman.com 13900000000".toDetectedAttributedString()) // 创建三个链接 https mailto tel
    .environment(\.openURL, OpenURLAction { url in
        switch url.scheme {
        case "mailto":
            return .discarded // 邮件将直接丢弃,不处理
        default:
            return .systemAction // 其他类型的 URI 传递到下一层(外层)
        }
    })
    .environment(\.openURL, OpenURLAction { url in
        switch url.scheme {
        case "tel":
            print("call number \(url.absoluteString)") // 打印电话号码
            return .handled  // 告知已经处理完毕,将不会继续传递到下一层
        default:
            return .systemAction // 其他类型的 URI 当前代码不处理,直接传递到下一层
        }
    })
    .environment(\.openURL, OpenURLAction { _ in
        .systemAction(URL(string: "https://www.apple.com")!) // 由于在本层之后我们没有继续设定 OpenURLAction , 因此最终会调用系统的实现打开苹果官网
    })

这种通过环境值层层设定的处理方式,给了开发者非常大的自由度。在 SwiftUI 中,采用类似逻辑的还有 onSubmit ,有关 onSubmit 的信息,请参阅 SwiftUI TextField 进阶 —— 事件、焦点、键盘[6]

handler 的返回结果 handleddiscarded 都将阻止 url 继续向下传递,它们之间的不同只有在显式调用 openURL 时才会表现出来。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// callAsFunction 的定义
public struct OpenURLAction {
  public func callAsFunction(_ url: URL, completion: @escaping (_ accepted: Bool) -> Void)
}

// handled 时  accepted 为 true , discarded 时 accepted 为 false
openURL(url) { accepted in
      print(accepted ? "Success" : "Failure")
}

结合上面的介绍,下面的代码将实现:在点击链接后,用户可以选择是打开链接还是将链接复制在粘贴板上:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
struct ContentView: View {
    @Environment(\.openURL) var openURL
    @State var url:URL?
    var show:Binding<Bool>{
        Binding<Bool>(get: { url != nil }, set: {_ in url = nil})
    }

    let attributedString:AttributedString = {
        var fatbobman = AttributedString("肘子的 Swift 记事本")
        fatbobman.link = URL(string: "https://www.fatbobman.com")!
        fatbobman.font = .title
        var tel = AttributedString("电话号码")
        tel.link = URL(string:"tel://13900000000")
        tel.backgroundColor = .yellow
        var and = AttributedString(" and ")
        and.foregroundColor = .red
        return fatbobman + and + tel
    }()

    var body: some View {
        Form {
            Section("NSDataDetector + AttributedString"){
                // 使用 NSDataDetector 进行转换
                Text("https://www.fatbobman.com 13900000000 feedback@fatbobman.com".toDetectedAttributedString())
            }
        }
        .environment(\.openURL, .init(handler: { url in
            switch url.scheme {
            case "tel","http","https","mailto":
                self.url = url
                return .handled
            default:
                return .systemAction
            }
        }))
        .confirmationDialog("", isPresented: show){
            if let url = url {
                Button("复制到剪贴板"){
                    let str:String
                    switch url.scheme {
                    case "tel":
                        str = url.absoluteString.replacingOccurrences(of: "tel://", with: "")
                    default:
                        str = url.absoluteString
                    }
                    UIPasteboard.general.string = str
                }
                Button("打开 URL"){openURL(url)}
            }
        }
        .tint(.cyan)
    }
}

openURL_Demo_Recording_iPhone_13_mini_2022-05-20_18.00.15.2022-05-20 18_03_18

总结

虽说本文的主要目的是介绍在 SwiftUI 视图中打开 URL 的几种方法,不过读者应该也能从中感受到 SwiftUI 三年来的不断进步,相信不久后的 WWDC 2022 会为开发者带来更多的惊喜。

希望本文能够对你有所帮助。

参考资料

[1] www.fatbobman.com: https://www.fatbobman.com

[2] 此处下载: https://github.com/fatbobman/BlogCodes/tree/main/openURLinSwiftUI

[3] Swift Playgrounds 4 娱乐还是生产力: https://www.fatbobman.com/posts/swiftPlaygrounds4/

[4] AttributedString——不仅仅让文字更漂亮: https://www.fatbobman.com/posts/attributedString/

[5] NSDataDetector: https://developer.apple.com/documentation/foundation/nsdatadetector

[6] SwiftUI TextField 进阶 —— 事件、焦点、键盘: https://fatbobman.com/posts/textfield-event-focus-keyboard/

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-05-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 肘子的Swift记事本 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
AI教育大模型及其应用
人工智能在教育领域的应用日益深入,涌现出许多AI教育大模型,它们致力于提升教学效率、优化学习体验、推动教育公平。这些大模型通常以通用大模型为基础,通过针对教育场景的持续训练和优化,不断提高解决教育专业任务的能力。
数字孪生开发者
2025/06/19
290
AI教育大模型及其应用
学而思研发面向全球数学爱好者大模型MathGPT
---- 新智元报道   编辑:好困 【新智元导读】近日,学而思官宣称,正在自研的数学大模型「MathGPT」,目前已取得阶段性成果。 近日,在各家大厂打得如火如荼的「ChatGPT大战」中,学而思也加入其中。 不过,学而思另辟蹊径选择的是自研数学大模型「MathGPT」,以数学领域的解题和讲题算法为核心,并且已经取得了阶段性成果。 对此学而思表示,基于该自研大模型的产品级应用预计会在年内推出,将面向全球数学爱好者和科研机构。 作为公司的核心项目,学而思早在今年春节之前就启动了相应的团队建设、数据、
新智元
2023/05/09
2670
学而思研发面向全球数学爱好者大模型MathGPT
千亿级、数学专用,MathGPT大模型开始公测了
8 月 24 日,机器之心获悉,在好未来 20 周年直播活动中,CTO 田密宣布好未来自研的数学领域千亿级大模型 MathGPT 开启内测。即日起,用户可通过官网(www.mathgpt.com)申请注册账号免费试用体验。
机器之心
2023/09/08
5310
千亿级、数学专用,MathGPT大模型开始公测了
解决通用LLM「偏科」问题,数学大模型MathGPT要来了!
机器之心原创 作者:蛋酱 数学大模型 MathGPT,专治大语言模型的「偏科」问题。 不做通用 LLM,不基于现有 LLM 做微调和接口调用,学而思自研的数学大模型 MathGPT 要来了。 这对于全世界的数学爱好者来说,都是个值得关注的好消息。 MathGPT 是面向全球数学爱好者和科研机构,以数学领域的解题和讲题算法为核心的大模型。据了解,学而思已将 MathGPT 定位为公司核心项目,由 CTO 田密负责,今年春节前,研发正在进行中,该项目已经启动相应的团队建设、数据、算力准备和技术研发。 进度方面
机器之心
2023/05/09
6970
解决通用LLM「偏科」问题,数学大模型MathGPT要来了!
实测学而思MathGPT大模型:中小学数学解题正确率有望在全球范围内创造新 SOTA
这着实是数理爱好者福音了!要知道市面上GPT-4在内的通用大模型,都无法实现这一点。
量子位
2023/09/08
6710
实测学而思MathGPT大模型:中小学数学解题正确率有望在全球范围内创造新 SOTA
学习机火拼大模型:科大讯飞、学而思、网易有道赌上半条身家性命
过去几年,“双减”落地教培落幕,学习机因其资源整合和效率提升的优势,成为越来越多家长减轻教育焦虑的不二选择。
刘旷
2024/06/11
1800
prompt概念提出者之一刘鹏飞发布Abel,仅仅使用SFT即可达数学开源SoTA,超越十亿多美元模型MathGPT和GPT4
今天突然看到prompt概念提出者刘鹏飞(现上交大副教授)在twitter上的消息:
zenRRan
2023/09/25
6010
prompt概念提出者之一刘鹏飞发布Abel,仅仅使用SFT即可达数学开源SoTA,超越十亿多美元模型MathGPT和GPT4
万“模”霜天竞自由!开源大模型的春天来了?
在当代人工智能领域中,如果将算力比作是AI的燃料,那么大模型则相当于AI的发动机。算力充当着AI体系运作的根基,使得复杂的算法和模型得以运行,大模型则将这些算力转换为具体的智能输出。而开源大模型则是人人都能用得上的发动机。
数据猿
2024/04/30
2390
万“模”霜天竞自由!开源大模型的春天来了?
清北爸爸辅导数学崩溃瞬间,这个国产大模型有解!AI启发问答关键情绪稳定
让清北毕业的爸爸都崩溃的这个难题,恐怕没有这么简单。毕竟,自己会做一道题和能把孩子教会,是完全不同的两件事。
新智元
2024/06/17
1550
清北爸爸辅导数学崩溃瞬间,这个国产大模型有解!AI启发问答关键情绪稳定
垂直大模型竞争,能突破数据“卡点”吗?
随着各大厂商参与竞逐,市场正在分化为通用与垂直两大路径,两者在参数级别、应用场景、商业模式等方面差异已逐步显现。
科技云报道
2023/08/03
4900
垂直大模型竞争,能突破数据“卡点”吗?
李航:关于大模型的思考及研究热点
ChatGPT 和 GPT4,相比传统的深度学习技术,如 BERT,主要是在智能性和通用性上取得了巨大突破。具备语言、知识、简单推理能力,能够很好地近似人的智能行为。不需要标注数据就可以在不同领域完成不同任务,也就是进行零样本或小样本学习。
算法进阶
2023/10/23
3970
李航:关于大模型的思考及研究热点
大模型帮陶哲轩解题、证明数学定理:数学真要成为首个借助AI实现突破的学科了?
去年 2 月份,DeepMind 发布了编程辅助利器 AlphaCode。它使用人工智能技术来帮助程序员更快地编写代码,可以自动完成代码、提供代码建议并检查错误,从而提高编程效率。AlphaCode 的问世意味着 AI 在解决现实世界问题的道路上又迈出了一大步。
机器之心
2023/08/07
4410
大模型帮陶哲轩解题、证明数学定理:数学真要成为首个借助AI实现突破的学科了?
MLLM真能看懂数学吗?MathVerse来了次摸底测评,放出当天登热榜
AIxiv专栏是机器之心发布学术、技术内容的栏目。过去数年,机器之心AIxiv专栏接收报道了2000多篇内容,覆盖全球各大高校与企业的顶级实验室,有效促进了学术交流与传播。如果您有优秀的工作想要分享,欢迎投稿或者联系报道。投稿邮箱:liyazhou@jiqizhixin.com;zhaoyunfeng@jiqizhixin.com。
机器之心
2024/04/19
1810
MLLM真能看懂数学吗?MathVerse来了次摸底测评,放出当天登热榜
白话科普:如何训练ChatGPT,能用它来挣钱吗?【P.S. 今晚19:30,说透ChatGPT】
本文作者 | 张杰   责编 | Carol 出品 | AI科技大本营(ID:rgznai100) 对话机器人不是个新技术,以往的机器人产品很多,为什么这次OpenAI公司推出的ChatGPT能这么火?因为以前的机器人只能做简单且有限的事,问天气、放音乐还行,问个复杂一些的事就有点“人工智障”了。ChatGPT可以说技术上的量变引起了效果上的质变,在三个方面让我感觉很惊艳: 有上下文记忆能力,多轮对话衔接得很好,很难看出是机器生成的; 有学习纠错能力,在它回答错误之后,如果你纠正了它,第二次就不会再答错;
AI科技大本营
2023/04/06
4890
白话科普:如何训练ChatGPT,能用它来挣钱吗?【P.S. 今晚19:30,说透ChatGPT】
谷歌研究员炮轰GPT初创公司瞎炒作,连发18条推文怒怼!
---- 新智元报道   编辑:昕朋 【新智元导读】面对GPT公司疯狂营销的乱象,谷歌研究员发长文怒怼其商业化模式:炒作救不了GPT!但投资人表示:无所谓,好玩就行 在AI领域,去年的流量王者,非生成式AI莫属。 从DALL-E 2到ChatGPT,从Stable Diffusion到Midjourney,AIGC行业呈现爆炸式的增长。 基于人工智能的生成式工具纷至沓来,让投资公司和广大公众眼花缭乱。 顶级投资公司红杉资本在一篇博文中写道:「生成式人工智能不仅变得更快、更便宜,而且在某些情况下比人类创
新智元
2023/02/24
3100
谷歌研究员炮轰GPT初创公司瞎炒作,连发18条推文怒怼!
人美声甜GPT,数学题哪里不会讲哪里
衡宇 发自 凹非寺 量子位 | 公众号 QbitAI 大模型的颠覆和变革,还只是开始。 ChatGPT一炮而红,重塑搜索、办公协同等多个场景和行业后,在线教育,被视为最重要的垂直场景——毕竟大语言模型展示出的能力,正是之前在线教育、AI老师所亟需的。 而且这种趋势已经开始,背靠大模型相关的在线教育应用,已经率先在海外火爆。 看过来!让GPT化身二次元美少女AI家教来讲数学题的方案,每步都有解法,再不用担心看见参考答案的“略”字: 基础到某个三角函数的定义,复杂到不同的解题方法与技巧,都能得到答案: 这就
量子位
2023/05/06
5170
人美声甜GPT,数学题哪里不会讲哪里
从逆境转型重生的科大讯飞半年报:AI大模型的无限机遇
8月12日,A股上市公司科大讯飞披露2023年上半年财报,由于收入下降和成本增长,公司净利润出现大幅下滑,盈利状况不尽如人意。
数据猿
2023/09/15
3480
从逆境转型重生的科大讯飞半年报:AI大模型的无限机遇
LLM评估综述论文问世,分三方面全面总结,还带资料库
大型语言模型(LLM)已经得到了学术界和产业界的广泛关注,而为了开发出好用的 LLM,适当的评估方法必不可少。现在,一篇有关 LLM 评估的综述论文终于来了!其中分三方面对 LLM 评估的相关研究工作进行了全面的总结,可帮助相关研究者索引和参考。
机器之心
2023/08/08
4390
LLM评估综述论文问世,分三方面全面总结,还带资料库
图灵巨头现身ICLR,顶会现场疯狂追星LeCun、Bengio!中国团队三大技术趋势引爆AGI新想象
图灵三巨头中的著名「e人」LeCun,提前就在X上大方公布出自己的行程,满怀期待地等着和粉丝们相见了。
新智元
2024/05/14
1340
图灵巨头现身ICLR,顶会现场疯狂追星LeCun、Bengio!中国团队三大技术趋势引爆AGI新想象
4个月狂揽两千万,国内首个披露营收的大模型来了!
8月31日,10余家大模型陆续通过《生成式人工智能服务管理暂行办法》备案,最终获批向公众开放。360智脑也已首批完成备案提交,预计将在未来1周左右陆续由各地方管理部门对外披露。
新智元
2023/09/09
3280
4个月狂揽两千万,国内首个披露营收的大模型来了!
推荐阅读
AI教育大模型及其应用
290
学而思研发面向全球数学爱好者大模型MathGPT
2670
千亿级、数学专用,MathGPT大模型开始公测了
5310
解决通用LLM「偏科」问题,数学大模型MathGPT要来了!
6970
实测学而思MathGPT大模型:中小学数学解题正确率有望在全球范围内创造新 SOTA
6710
学习机火拼大模型:科大讯飞、学而思、网易有道赌上半条身家性命
1800
prompt概念提出者之一刘鹏飞发布Abel,仅仅使用SFT即可达数学开源SoTA,超越十亿多美元模型MathGPT和GPT4
6010
万“模”霜天竞自由!开源大模型的春天来了?
2390
清北爸爸辅导数学崩溃瞬间,这个国产大模型有解!AI启发问答关键情绪稳定
1550
垂直大模型竞争,能突破数据“卡点”吗?
4900
李航:关于大模型的思考及研究热点
3970
大模型帮陶哲轩解题、证明数学定理:数学真要成为首个借助AI实现突破的学科了?
4410
MLLM真能看懂数学吗?MathVerse来了次摸底测评,放出当天登热榜
1810
白话科普:如何训练ChatGPT,能用它来挣钱吗?【P.S. 今晚19:30,说透ChatGPT】
4890
谷歌研究员炮轰GPT初创公司瞎炒作,连发18条推文怒怼!
3100
人美声甜GPT,数学题哪里不会讲哪里
5170
从逆境转型重生的科大讯飞半年报:AI大模型的无限机遇
3480
LLM评估综述论文问世,分三方面全面总结,还带资料库
4390
图灵巨头现身ICLR,顶会现场疯狂追星LeCun、Bengio!中国团队三大技术趋势引爆AGI新想象
1340
4个月狂揽两千万,国内首个披露营收的大模型来了!
3280
相关推荐
AI教育大模型及其应用
更多 >
LV.1
这个人很懒,什么都没有留下~
目录
  • SwiftUI 1.0( iOS 13、Catalina )
  • SwiftUI 2.0( iOS 14、Big sur )
    • openURL
    • Link
  • SwiftUI 3.0( iOS 15、Monterey )
    • Text 用例 1 :自动识别 LocalizedStringKey 中的 URL
    • Text 用例 2 :识别 Markdown 语法中的 URL 标记
    • Text 用例 3 :包含 link 信息的 AttributedString
    • Text 用例 4 :识别字符串中的 URL 信息,并转换成 AttributedString
  • 自定义 Text 中链接的颜色
  • 自定义 openURL 的行为
  • 总结
    • 参考资料
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档