2019-08-20 10:34:23 weixin_38743119 阅读数 1583

开发过程中总是会碰到string, unicode, ASCII, 中文字符等编码的问题, 每次碰到问题都要现搜, 非常浪费时间,这次一定要搞清楚python 的string和Unicode到底怎么回事。

首先要知道string object和unicode object是两种不同的类型,Unicode就是为了统一各国各地区的编码规则, 实际上Unicode没有编码规则, 只是一套包含全世界符号的字符集. Unicode也不完美, 于是后续有了众多UTF编码(UTF-8, UTF-16).

我的解释可能没那么全面,如果你还有疑问,可以看看下方视频,听知名技术专家李刚老师对Python中文处理模块和python字符串相关知识的讲解,

Python编程 字符串入门

李刚老师出版的《疯狂java》体系图书曾得到市场的广泛认可,经过多次重印,并被多家高校选作教材。上方视频来自于李刚老师的在线视频课程《21天通关Python》第三节字符串入门。

鉴于大家都有学习Python的困惑,今天就给大家推荐一本巨有影响力的Python实战书,上线时间仅2个月,就超越了众多实力派,成京东和当当网上的长期畅销图书,并且收获了3.4W的五星好评。

这本书可谓是笔者独家私藏图书之一了,对我学习Python有着莫大的帮助,在京东上也常常"断货",这次拿出来给大家分享一下,希望能帮到大家。

《21天通关Python》视频课程以畅销图书为教材,由图书作者李刚亲自操刀讲解;上手门槛低,可作为0基础掌握Python教材;书籍+线上复合型学习场景特别适合Python小白学习!

点此查看课程: https://edu.csdn.net/bundled/detail/49?utm_source=jiansuopy3_1
(含图书邮寄+视频教程+社群答疑+导师带队)

笔者跟大家分享一个福利!下单时输入优惠码csdn66,立减20元,券后仅需99元!

扫码入Python技术交流群,可免费听技术讲座+领学习资料+视频课免费看
在这里插入图片描述

2016-09-12 09:44:30 u010441187 阅读数 1247

1.从Swift中调用已有的Objective-C代码

在写了一些独立的Swift组件并对它们进行单元测试后,我们开始用Swift调用已有的Objective-C的类。一切都开始变得实际起来。

要从Swift调用Objective-C的类你需要定义Swift桥接头文件。这是一个.h文件,用来定义所有能暴露给Swift调用的Objective-C头文件。在文件的开头,需要修改编译设置来让编译器在编译的时候把它加进去。当这一切完成后,这些Objective-C的类就被导入进Swift的世界,能被Swift很方便地调用。

当你在Swift中调用Objective-C类时,你可能会收到一个警告:pointer is missing a nullability type specifier。当Objective-C代码被导入到Swift,编译器会检查nullability compatibility--如果没有任何关于nullability的信息,这个提示就会出现。要做这个检查是因为在Swift中nullability信息都是显式申明的,不论是非空类型还是可选类型。

我们唯一需要做的仅仅是在被调用的Objective C头文件中加入nullability信息来消除这些编译器警告。我们使用新的nullablenonnull标注来达成这一目的。重置工作仅仅只需要花几个小时,因为我们只需要修改我们在Swift中用到的类,无非是几百行的代码。然而,做这些修改时我们绞尽脑汁思考在已有代码库中哪些可以或不能被设置成nil,但当我们把这些代码暴露给Swift时我们无法避免的要做出一个明确的抉择。

在大部分情况下,重构涉及到一些像这样的修改:

1
2
3
4
5
// 在.h文件中原来的方法签名
@property (nonatomic, strong, readonly) THSession *session;
  
// 新的,Swift友好型的方法签名
@property (nonatomic, strong, readonly, nullable) THSession *session;

在方法签名中存在block时,修改会略微复杂,但是没有不可掌控的:

1
2
3
4
5
// 在.h文件中原来的方法签名
- (NSURLSessionDataTask *)updateWithSuccess: (void(^)())success error:( void(^)(NSError * error))error;
  
// 新的,Swift友好型的方法签名
- (nonnull NSURLSessionDataTask *)updateWithSuccess: (nullable void(^)())success error:(nullable void(^)(nonnull NSError *error))error;

2.在Objective C调用Swift代码

在有不少复杂度适中的使用了Objective-C类的Swift组件后,是时候在Objective C里面调用这些组件了。从Objective-C中调用Swift组件更直接,因为不需要额外的桥接头文件。

唯一需要对现有Swift文件做修改的是继承NSObject或给我们希望暴露的Swift类添加@objc属性。有一些特殊的Swift类Objective-C无法使用,像结构体(structures),元组(tuples),和泛型(generics),以及一些其他的类。这些限制不会造成什么影响,因为我们不想把任何新的结构暴露给Objective-C。唯一我们需要做些额外处理的特例是枚举类型。要使用Swift中定义的枚举类型,需要在Swift中明确申明Int值类型:

1
2
3
@objc enum FlightCabinClass: Int {
   case Economy = 1, PremiumEconomy, Business, First, PrivateJet
}
2016-02-18 16:38:07 sevenquan 阅读数 1686

1、创建一个Object-C工程:SwiftInObjectC


2、创建一个Object-C的类:SwiftLan(注意选择)


当创建完成后,Xcode提示下面警告,会提问我们需不需要创意一个Bridge,当然我们选择“Yes”。


这样会在工程中看到一个“SwiftInObjectC-Bridging-Header.h”文件。这个文件的作用可以根据注释看出来:


[html] view plain copy
  1. //  
  2. //  Use this file to import your target's public headers that you would like to expose to Swift.  
  3. //  

3、下面一步是我们要修改“Bulid Setting” 中的 Defines Module 设置为“Yes” ,同时再看看Product Name 是不是工程的名字。如果是就不用管了

如果不是就改为工程名字。


4、在ViewController中引入头文件 #import "SwiftInObjectC-Swift.h"SwiftInObjectC是设置的Product Name

5、在修改我们创建的SwiftLan 类如下:

[html] view plain copy
  1. class SwiftLan: NSObject {  
  2.   
  3.     /*  
  4.     // Only override drawRect: if you perform custom drawing.  
  5.     // An empty implementation adversely affects performance during animation.  
  6.     override func drawRect(rect: CGRect) {  
  7.         // Drawing code  
  8.     }  
  9.     */  
  10.     @objc(initWithData:)  
  11.     init(data: String){  
  12.         println(data);  
  13.     }  
  14.   
  15. }  

6、在ViewController类中创建实例子如下:

[html] view plain copy
  1. SwiftLan *tempString = [[SwiftLan alloc] initWithData:@"Test Swift"];  
  2. NSLog(@"%@",tempString);  

7、然后Build & Run 可以在 控制台看见:


运行OK,说明我们已经成功在OC中使用了Swift 方法和类。

8、下面看看二个动效的Swift类,同样的方法:

[html] view plain copy
  1. [self.view addSubview:({  
  2.         NVActivityIndicatorType type  = NVActivityIndicatorTypePacman;  
  3.         NVActivityIndicatorView *temp = [[NVActivityIndicatorView alloc] initWithFrame:CGRectMake(0,0,80,80) type:type];  
  4.         temp.center = self.view.center;  
  5.         [temp startAnimation];  
  6.         temp;  
  7.     })];  
  8.       
  9.     [self.view addSubview:({  
  10.         _testLabel = [[LTMorphingLabel alloc]initWithFrame:CGRectMake(0,200,self.view.bounds.size.width,80)];  
  11.         _testLabel.text = @"";  
  12.         _testLabel.textAlignment = NSTextAlignmentCenter;  
  13.         _testLabel.textColor = [UIColor whiteColor];  
  14.         _testLabel.font = [UIFont systemFontOfSize:28];  
  15.         _testLabel;  
  16.     })];  
效果如下:


9、说明的一点是Swift的 Enum和 OC的 Enum 的 转换 :

原来的:

[html] view plain copy
  1. public enum NVActivityIndicatorType  {  
  2.     case Blank  
  3.     case BallPulse  
  4.     case BallGridPulse  
  5.     case BallClipRotate  
  6.     case SquareSpin  
  7. }  

添加新的:

[html] view plain copy
  1. @objc public enum NVActivityIndicatorType :Int{  
  2.     case Blank  
  3.     case BallPulse  
  4.     case BallGridPulse  
  5.     case BallClipRotate  
  6.     case SquareSpin  
  7. }  
做了上面的转变后在OC中就可以使用Swift的Enum类型了

使用方法如下:

[html] view plain copy
  1. //NVActivityIndicatorType type  = NVActivityIndicatorTypePacman;  
  2. //NVActivityIndicatorType type  = NVActivityIndicatorTypeBallClipRotate;  
  3. //NVActivityIndicatorType type  = NVActivityIndicatorTypeBallScale;  

注意是NVActivityIndicatorType无缝连接 具体某个枚举的类型Pacman,变为了“NVActivityIndicatorTypePacman”


源代码下载


转自:http://blog.csdn.net/justinjing0612/article/details/47752367

2015-05-11 15:33:30 xiao562994291 阅读数 2563

Object-C调用Swift,

创建Swift文件,然后在需要调用Swift文件的地方加上

#import "工程名-Swift.h"

Swift调用 Object-C

创建Swift文件的时候,会出现问是否要创建Bridging-header.h.当然点击Yes。

把你要引用的oc文件头文件写到里面就可以了。在Swift文件里就可以引用了。

调用C++

把Object-c文件改成Object-C++。就是把.m改成.mm。然后就可以写C++代码了。

Swift引用C++必须首先引用object-c;


悦览播放器

2015-06-10 23:48:28 Qyee16 阅读数 2006

在使用oc调用swift时,一定要看清,下面的红色部分,productName,不是类名。坑爹啊!




苹果官方文档:https://developer.apple.com/library/ios/documentation/Swift/Conceptual/BuildingCocoaApps/MixandMatch.html#//apple_ref/doc/uid/TP40014216-CH10-XID_78

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