• 在项目中右键添加一个swift文件,我添加的LearnSwift.swift添加Xcode弹出‘是否配置oc桥接头文件’的提示,点确认,系统自动生成一个项目名-Bridging-Header.h的文件,我的是LearnSwift-Bridging-Header.h。...
    在项目中右键添加一个swift文件,我添加的LearnSwift.swift添加后Xcode弹出‘是否配置oc桥接头文件’的提示,点确认,系统自动生成一个项目名-Bridging-Header.h的文件,我的是LearnSwift-Bridging-Header.h

    配置oc桥接头文件的提示
    LearnSwift-Bridging-Header.h实质上是一个供swift使用的头文件,在这里把所有要暴露给swift的oc头文件都添加进去,这样写swift的时候就可以直接使用那些oc的类和方法了。
    因为swift本身没有头文件,只有.swift;而oc有.h和.m文件。有了这个声明,.swift就可以直接使用oc的.h了

    我的LearnSwift-Bridging-Header.h文件内容
    接下来就可以直接在LearnSwift.swift中写swift代码啦 ~ 随便声明一个类,打些log:

    我的LearnSwift.swift文件内容

    编译直接通过,这就是在swift中使用oc类和方法了,一切顺利!在oc中使用swift,我在AppDelegate.m中使用刚才创建的swift类,那么先要引用swift头文件,即#import "LearnSwift-Swift.h",然后在这个.m文件中就可以任意使用swift创建的类和方法了:
    LearnSwift *learnSwift = [[LearnSwift alloc] init];[learnSwift logsth:@"code from oc"];
    编译运行直接过! 输出:
    this is a log from swift : code from oc理解下#import "LearnSwift-Swift.h"
    其实是项目名-Swift.h,这也是Xcode自动生成的,根据你写的所有swift代码,生成一个oc的.h文件,进行类和方法的声明,这样在oc里引用这个头文件后,就相当于引用了所有swift声明,可以直接使用了。


    展开全文
  • Xcode 添加自定义代码块 自定义代码块可以提高编写代码的效率,包括一些常用的函数或者API,都能很快的打出来。 现以添加快捷注释为例: 1.在代码中写入 //MARK: <#注释#> ==注释== 2.将代码拖...


    Xcode 添加自定义代码块

    自定义代码块可以提高编写代码的效率,包括一些常用的函数或者API,都能很快的打出来。

    现以添加快捷注释为例:

    1.在代码中写入 //MARK: <#注释#>  ==注释==

    2.将代码拖入代码片

     

    3.添加相关设置

    设置应用平台场景语言快捷键的就可轻松添加代码块了

     

     

     

     

    展开全文
  • 你会问同一个Xcode项目中还会用不同版本的Swift?对!举个栗子:2年前你写了一个管理密码的App,最近你觉得有必要再写一个Today Widget插件用来便捷显示密码。之前的代码Swift版本是3.2(假设),而最新的Widget则...

    你会问同一个Xcode项目中还会用不同版本的Swift?

    对!举个栗子:2年前你写了一个管理密码的App,最近你觉得有必要再写一个Today Widget插件用来便捷显示密码。

    之前的代码Swift版本是3.2(假设),而最新的Widget则使用4.0

    为什么不把3.2的代码升级到4.0呢?这是可以的,但是涉及到要改很多地方:

    升级带来许多问题


    而且3.2和4.0也不是完全不兼容,只是在某些地方新旧版本会有冲突,没必要为了这一点兼容性而老项目全部升级版本。

    比如说对于NSMutableAttributedString的操作,4.0之后对于属性名称的引用方式和之前有不同,无法写出3.2和4.0都能编译通过的代码。

    对于3.2和4.0都会引用到的代码片段,我们必须因”版”而异,用Swift的编译宏命令做代码隔离:

    #if swift(>=4.0)
                attrString.addAttribute(.foregroundColor, value: UIColor.red, range: range)
                attrString.addAttribute(.backgroundColor, value: UIColor.green, range: range)
                attrString.addAttributes([.shadow:keywordShadow,.verticalGlyphForm:0], range: range)
            #else
                attrString.addAttribute(NSForegroundColorAttributeName, value: UIColor.red, range: range)
                attrString.addAttribute(NSBackgroundColorAttributeName, value: UIColor.green, range: range)
            attrString.addAttributes([NSShadowAttributeName:keywordShadow,NSVerticalGlyphFormAttributeName:0], range: range)
            #endif

    以上代码在项目的公共组里的String+ext.swift文件中,该文件会同时被App和Widget项目包含使用。

    使用如上所示的代码隔离,或称为选择编译使得全部项目顺利编译通过。

    展开全文
  • Xcode 11.4 正式版终于发布了,新版本带来了很多的提升,同时也是引入了一些新的bug。为了方便大家解决问题,我计划将语法方面的问题汇总到一篇文章中,方便大家查阅。 新属性 类型检查现在更加精确。在许多情况下...
        

    Xcode 11.4 正式版终于发布了,新版本带来了很多的提升,同时也是引入了一些新的bug。为了方便大家解决问题,我计划将语法方面的问题汇总到一篇文章中,方便大家查阅。

    新属性

    • 类型检查现在更加精确。在许多情况下,与Xcode 11.3.1相比,此精度可使Xcode 11.4中大文件的代码完成速度提高1.2到1.6倍。

    • 现在,隐含成员的代码完成功能可用于不完整的字典文字和不完整的三元表达式。

    • 代码完成结果改善了类型信息。结果将在可能的情况下显示不透明的结果类型(例如某些视图),并保留类型别名。结果将不再显示不必要的父类型。例如

    import SwiftUI
    struct MyModifier: ViewModifier {
        body
    }
    

    当在MyModifier中完成body时,Xcode 11.4将提供body(content:Content)->some View。

    • 编译器现在支持本地函数,其默认参数从外部作用域捕获值
    func outer(x: Int) -> (Int, Int) {
        func inner(y: Int = x) -> Int {
            return y
        }
        
        return (inner(), inner(y: 0))
    }
    
    
    • 您可以调用声明 func callAsFunction 方法(如函数)的类型的值。调用语法是应用 func callAs函数方法的速记:
    struct Adder {
        var base: Int
    
        func callAsFunction(_ x: Int) -> Int {
          return x + base
        }
    }
    
    var adder = Adder(base: 3)
    adder(10) // returns 13, same as adder.callAsFunction(10)
    
    • 下标现在可以声明默认参数。
    struct Subscriptable {
        subscript(x: Int, y: Int = 0) {
          ...
        }
    }
    
    let s = Subscriptable()
    print(s[0])
    

    技术交流

    QQ:3365059189
    SwiftUI技术交流QQ群:518696470

    展开全文
  • 要在Xcode 8中完全使用Swift 3.0,个人感觉不现实,因为有些重要的开源框架无法同时支持Swift 3.0和iOS 8.0,比如最常用的Alamofire,4.0版本才支持Swift 3.0,但却要求iOS 9.0+。目前的做法是把Xcode 8 bulid ...

    要在Xcode 8中完全使用Swift 3.0,个人感觉不现实,因为有些重要的开源框架无法同时支持Swift 3.0和iOS 8.0,比如最常用的Alamofire,4.0版本才支持Swift 3.0,但却要求iOS 9.0+。

    目前的做法是把Xcode 8 bulid setting中的Use Legacy Swift Language Version设为Yes,然后在集成开源框架时,必须指定Swift 2.3版本的,比如SwifyJSON,在Podfile中应该这么写:pod 'SwiftyJSON', '2.4.0',开源框架一般会保留一个Swift 2的分支。

    等什么时候不需要适配iOS 8,或者Swift 3.0版本的开源框架不再要求iOS 9.0+时,再彻底转到Swift 3.0。

    展开全文
  • Xcode 生成swift framework 动态库,用lipo create命令合并了phone和simulator后(只合并了framework里面的“可执行文件”),导入到测试项目中,发现真机下可以编译运行,但模拟器无法编译,错误为:Error:Use of ...
  • 我们知道Xcode中可能包含不知一个Swift的版本,那么我们如何找到它们对应的路径呢?熟悉unix shell命令的童鞋都知道有一个find指令,在我们已知Xcode路径时,我们可以在其中找到Swift在哪里:find /Applications/Xcode....
  • //联系人:石虎 QQ:1224614774 昵称:嗡嘛呢叭咪哄 ...一、使用cocopod导入第三方swift包后,... The “Swift Language Version” (SWIFT_VERSION) build setting must be set to a supported valuefor target
  • 转自:http://www.bubuko.com/infodetail-1127864.html 1.项目上右键,New File选择Header File,选择文件目录,然后确定。 ? ? 2.点击项目-->TARGETS-->Build Settings中找到Swift Compiler...
  • 我们使用XCode 11.3创建一个基于Swift的的Hello World应用示例。
  • 本文讲的是在 Xcode 项目中使用 swift package fetch, 到目前为止,Cocoa with Love 的 git 仓库都使用“git subtrees”来管理相关依赖,所有的依赖都被拷贝并静态存放于依赖方目录下。我希望能找到一种更动态地...
  • 电脑比较老mac最高升级到10.13.6,Xcode最高升级到10.1,不支持swift5. 从苹果那下载了swift5.0。 ![图片说明](https://img-ask.csdn.net/upload/202004/15/1586921811_273170.png) ![图片说明]...
  • Xcode 9 引入了 New Build System,可在 Xcode 9 的 File -> Project Settings... 中选择开启。 预编译 Bridging Headers 文件 对于 Swift 和 Objective-C 混合的项目,Swift 调用 Objective-C 时,需要建立一...
  • iOS开发从入门到精通 基于Xcode9和Swift4视频培训教程,本教程手把手教您学习Xcode9和Swift4语言!一看就懂,一学就会! 视频教程拥有180节课程,包含iOS开发基础知识、数据处理、网络访问、多线程、社会化分享、...
  • xcode 从 v6.0开始正式支持framework的工程,也可以说是从iOS 8开始可以在项目中集成动态链接库,在iOS8之前除了系统自带的framework之外,第三方库只支持静态链接库。 我们此处只探讨如何基于swift构建...
  • 一、UITableView创建(分段代码)1、怎么创建swift的项目这里就不详细写了,直接上代码创建tableview(1.)遵守tableview的Delegate及DataSourceclass ViewController: UIViewController,UITableViewDelegate,...
  • 现象描述:在已经添加了 projectName-Bridging-Header.h头文件后,还是找不到第三方库的类型 解决方法:在Build settings,找到Swift Compiler -Code generatron下的Objective-C-Bridging-header,把project...
  • 原创Blog,转载请注明出处 ... 工欲善其事,必先利其器,强烈建议新手同学好好研究下XCode这个工具。比如Build Settings,Build Info Rules,Build Parse, Edit Scheme… 前言:这个Swift调试系列分为四篇 图形化界面
  • import UIKitimport Foundationclass ViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view, typicall...
  • 随着Xcode9 Swift4 的到来,一些小问题也接踵而至。许多优秀的Swift第三方框架还未来得及迎接Swift4的到来,它们还停留在swift3.x的状态,这个时候新建一个项目,使用cocoapods写上需要使用的第三方,一编译就是满屏...
1 2 3 4 5 ... 20
收藏数 12,731
精华内容 5,092
热门标签