2019-03-21 15:53:16 liuyong0214 阅读数 154
  • iOS/Swift/OC/Objective-C/Xcode/0基础/入门

    这是一门快速入门iOS开发的课程,目的是让大家快速学会,iOS开发环境搭建,和iOS一些基础知识,最后完成一个小项目。 项目信息 提供完整的Git提交历史,和每节视频一一对应,目前有41次提交,355行注释,271行代码(不包含可视化布局文件,纯Swift和Objective-C代码)。

    2968 人正在学习 去看看 任苹蜻

项目中有这个需求,查看了很多资料,自己再Mark一下:

1、如果项目中没有swift文件,需要创建一个,名字随意,同时会让生成一个(项目名-Bridging-Header.h)的文件,一并生成

2、cocoapod集成所需要的三方库到项目中

3、在pods中找到集成的swift三方库,在Build Settings中搜索swift language version,改成三方库所支持的最高版本

4、点击项目->targets->build settings 搜索module将
     1.enable modules
     2.link frameworks automatically
     两个设置成YES

这样就大功告成

如果想使用自己刚创建的Swift文件,可以在.pch文件中引用头文件#import "项目名-Swift.h"

这个文件是系统自动创建好的,是隐藏的,可以直接引用,这样就可以在OC项目中使用刚创建的Swift文件了

2017-07-10 11:16:59 polarGW 阅读数 578
  • iOS/Swift/OC/Objective-C/Xcode/0基础/入门

    这是一门快速入门iOS开发的课程,目的是让大家快速学会,iOS开发环境搭建,和iOS一些基础知识,最后完成一个小项目。 项目信息 提供完整的Git提交历史,和每节视频一一对应,目前有41次提交,355行注释,271行代码(不包含可视化布局文件,纯Swift和Objective-C代码)。

    2968 人正在学习 去看看 任苹蜻

随着swift趋向于稳定,越来越多的公司启动的新项目也想使用swift过把瘾,使用swift的好处与弊端不再赘述。目前版本是swift3.0,而且Xcode9beta版中已经更新到swift4.0。使用swift开发是大趋势,这里从以下几个方面看一下如何进行简单的配置。

  • OC中引用Swift文件
  • Swift中引用OC文件,以及第三方库
  • Xcode8以后编译swift2.x
  • OC引用Swift第三方库

一、OC中如何引用Swift文件:
首先先来创建一个object-c语言的项目,然后直接一个swift类,这时会弹出如下提示:
配置桥接头文件
先选择Do not Create,稍后会提到,系统会自动创建一个格式:xxx项目名-Swift.h的头文件,不显示但是可以直接引用,直接引用,这时发现报错了。
报错了
这是为什么呢?虽然一般情况下是直接引用xxx项目名-Swift.h,真正需要引用的是Product Moudle Name对应的文件名:
模块名配置
也可在此基础上搜索swift,对应的文件名正是想要的文件名,为什么上面还要提搜索pack找Product Moudle Name直接搜swift不就好了吗?因为这个名字是拼出来的:Product Moudle Name-Swift.h,可以去pack里面删除Product Moudle Name对应的内容,再回来搜swift看一下就明白了。
搜索swift
项目在创建的时候名称有的时候可能有歧义系统自动帮我们修改。swift在OC项目中是作为Moudle来使用的,名称继承自PROJECT下的Product Moudle Name,导入时报错请自行检查是否匹配。
目前为止导入头文件成功了,调用一下SwiftTest类中的log方法。
方法配置
却发现一直报未定义该类的错误:
未定义报错
点击生成的项目名-Swift.h的头文件里面却发现没有关于Swift声明:
未声明该类
后来经过查找发现是因为没有创建桥接文件导致的,手动来创建一下桥接文件,命名规则:项目名-Bridging-Header。
创建桥接文件
到项目里手动配置文件路径:
配置方法
配置完成后clean然后build点击项目名-Swift.h进入就可以发现定义swift类的声明,Command + R 运行成功。
二、Swift中引用OC文件,以及第三方库
swift引用OC文件比较简单:
1)创建桥接文件(参考上面步骤)
2)把需要用到类或者第三方SD、framework头文件引入
3)直接在swift文件中使用
由于比较简单不在赘述,稍后会提到注意事项。
三、Xcode8以后编译swift2.x以及pod引用的swift框架
Xcode8以后swift的currentVersion改为3.0,如果是swift2.x项目打开往往会有这样的提示:
转换提示
如果你想转换的直接点击convert,但是要注意备份小心一万点爆红,如果点击了later之后又想转换了可以进行如下操作:
手动转换
如果想要继续编译swift2.x需要设置版本:
设置版本
如果没有使用第三方框架那么现在就可以build了,而且是成功的,但是如果使用了第三方的framework,那么每个framework都需要设置一次,如下:
设置pod的版本
这里几点需要注意的:
1)pod里面的framework的版本必须与taget里面的一致否则编译失败。
2)必须与最低版本一致有一个framework使用了swift2.x其他都必须设置为YES
3)任何时候点击convertToCurrentVersion都是转换到最新版本也就是当前的swift3.0,即使你设置了使用以前版本再次进行转换也是转换到swift3.0不会转换到以前版本。
4)每次pod以后之前的配置都会重置,需要从新设置版本。但是可以在Podfile里面加入如下代码,将会对所有提交的framework进行设置:

post_install do |installer|
  installer.pods_project.targets.each do |target|
  target.build_configurations.each do |config|
  config.build_settings['SWIFT_VERSION'] = '3.0'
  end
 end
end

如下图:
pod设置
四、OC引用Swift的framework:
配置方法跟pod配置版本号方法相同,设置完版本号后在需要的文件中引用:#import <framework/framework-Swift.h>】也可以通过引入模块的方式:@import framework;这两种方式效果相同。
注意:很多swift三方库,并不支持OC使用,而绝大部分OC库支持swift,是向下兼容的,OC与Swift混编的注意事项,稍后补充。
ps:文章有点啰嗦,本人系新手,主要是记录给自己看。

2019-09-18 16:56:38 a121303051 阅读数 368
  • iOS/Swift/OC/Objective-C/Xcode/0基础/入门

    这是一门快速入门iOS开发的课程,目的是让大家快速学会,iOS开发环境搭建,和iOS一些基础知识,最后完成一个小项目。 项目信息 提供完整的Git提交历史,和每节视频一一对应,目前有41次提交,355行注释,271行代码(不包含可视化布局文件,纯Swift和Objective-C代码)。

    2968 人正在学习 去看看 任苹蜻

在升级flutter1.9+之后,flutter默认的iOS项目为swift,Android的默认项目为kotlin,而且通过IDEA创建的flutter项目,即使勾选了语言为oc,但是创建后的项目仍然是swift,颇为头疼.

那么我们修改创建项目项目的语言呢,

首先查看flutter create 支持哪些sub commands
```
 ~/Desktop/testcode/ flutter create
No option specified for the output directory.
Create a new Flutter project.

If run on a project that already exists, this will repair the project,
recreating any files that are missing.

Usage: flutter create <output directory>
-h, --help                     Print this usage information.
    --[no-]pub                 Whether to run "flutter pub get" after the
                               project has been created.
                               (defaults to on)

    --[no-]offline             When "flutter pub get" is run by the create
                               command, this indicates whether to run it in
                               offline mode or not. In offline mode, it will
                               need to have all dependencies already available
                               in the pub cache to succeed.

    --[no-]with-driver-test    Also add a flutter_driver dependency and generate
                               a sample 'flutter drive' test.

-t, --template=<type>          Specify the type of project to create.

          [app]                (default) Generate a Flutter application.
          [package]            Generate a shareable Flutter project containing
                               modular Dart code.
          [plugin]             Generate a shareable Flutter project containing
                               an API in Dart code with a platform-specific
                               implementation for Android, for iOS code, or for
                               both.

-s, --sample=<id>              Specifies the Flutter code sample to use as the
                               main.dart for an application. Implies
                               --template=app. The value should be the sample ID
                               of the desired sample from the API documentation
                               website (http://docs.flutter.dev). An example can
                               be found at
                               https://master-api.flutter.dev/flutter/widgets/Si
                               ngleChildScrollView-class.html

    --list-samples=<path>      Specifies a JSON output file for a listing of
                               Flutter code samples that can created with
                               --sample.

    --[no-]overwrite           When performing operations, overwrite existing
                               files.

    --description              The description to use for your new Flutter
                               project. This string ends up in the pubspec.yaml
                               file.
                               (defaults to "A new Flutter project.")

    --org                      The organization responsible for your new Flutter
                               project, in reverse domain name notation. This
                               string is used in Java package names and as
                               prefix in the iOS bundle identifier.
                               (defaults to "com.example")

    --project-name             The project name for this new Flutter project.
                               This must be a valid dart package name.

-i, --ios-language             [objc, swift (default)]
-a, --android-language         [java, kotlin (default)]
    --[no-]androidx            Generate a project using the AndroidX support
                               libraries

Run "flutter help" to see global options.

```
在创建项目时,比如我们想修改iOS的语言为oc,那么执行以下命令:
```
flutter create -i objc  flutteroc
```

2016-04-09 09:53:00 T13134485832 阅读数 2
  • iOS/Swift/OC/Objective-C/Xcode/0基础/入门

    这是一门快速入门iOS开发的课程,目的是让大家快速学会,iOS开发环境搭建,和iOS一些基础知识,最后完成一个小项目。 项目信息 提供完整的Git提交历史,和每节视频一一对应,目前有41次提交,355行注释,271行代码(不包含可视化布局文件,纯Swift和Objective-C代码)。

    2968 人正在学习 去看看 任苹蜻

OC项目中添加swift文件

1. 系统会自动创建一个 OCAndSwiftDemo(工程名字)-Bridging-Header.h 这样的bridging文件

2. 需要被swift调用的OC文件的.h文件添加到bridging文件中

3.这个头文件会自动加入

4.OC中引用swift的文件 需要引入一个头文件   工程名-swift.h 这样一个头文件

5.这样就支持OC工程下的swift混编了

转载于:https://www.cnblogs.com/aLaWish/p/5370907.html

2018-07-04 23:03:21 lilang7 阅读数 738
  • iOS/Swift/OC/Objective-C/Xcode/0基础/入门

    这是一门快速入门iOS开发的课程,目的是让大家快速学会,iOS开发环境搭建,和iOS一些基础知识,最后完成一个小项目。 项目信息 提供完整的Git提交历史,和每节视频一一对应,目前有41次提交,355行注释,271行代码(不包含可视化布局文件,纯Swift和Objective-C代码)。

    2968 人正在学习 去看看 任苹蜻

背景: 项目里面OC写的文件有个block属性要在swift里面访问, 但是在swift里面怎么都无法访问到属性, 然后把block属性加到oc的方法参数里面,连方法也不能访问了. 

思考: 第一直觉猜的是swift不支持oc的block了,但是仔细一想没有道理, 就新建了一个项目, 居然可以访问block属性和方法, 然后机智的想, 唯一的区别就是block的参数类型, 一个是自定义的, 一个是系统自带的, 然后一看oc的头文件, 用的是@class, 这个时候反应过来了, 多半是这里的问题, 把@class换成#import, 搞定可以访问了.

总结:@class是标识有这么个类但是没有类的详细信息, #import包含了类的完整信息, swift是桥接来访问oc文件的, 在桥接文件里面没有加别的import所以这个@class表示的类, 找不到, 这才是原因. 换成import后了, swift本来桥接了模板oc文件当然就可以访问了. 宁外测试发现虽然oc里面可以访问这个block和方法, 但是一旦要调用那个自定义类型的属性的时候依然是卵的, 所以还是要import那个文件.

没有更多推荐了,返回首页