小编nhg*_*rif的帖子

一起使用CocoaPods和@IBDesignable

我有一个项目使用@IBDesignable来控制Storyboard中的视图属性,一切正常.但是,如果我按照此处所述集成pod并添加桥接文件(https://medium.com/swift-programming/swift-cocoapods-da09d8ba6dd2),则Storyboard不再正确显示.它在我使用@IBDesignable进行自定义视图的位置显示一个空白视图.pod正常工作,我无法在Storyboard中看到我的更改.还原我的更改并删除pod,解决了这个问题?

反正有没有使用CocoaPods和@IBDesignable,或者这只是Xcode6中的一个错误?

xcode-storyboard cocoapods swift xcode6

10
推荐指数
1
解决办法
1065
查看次数

Swift内存管理如何工作?

具体来说,Swift内存管理如何使用委托模式与选项一起使用?

习惯于在Objective-C中编写委托模式,我的直觉是创建委托weak.例如,在Objective-C中:

@property (weak) id<FooDelegate> delegate;
Run Code Online (Sandbox Code Playgroud)

但是,在Swift中这样做并不是那么简单.

如果我们只有一个看似正常的协议:

protocol FooDelegate {
    func doStuff()
}
Run Code Online (Sandbox Code Playgroud)

我们不能将此类型的变量声明为弱:

weak var delegate: FooDelegate?
Run Code Online (Sandbox Code Playgroud)

产生错误:

'weak'不能应用于非类型'FooDelegate'

所以我们要么不使用关键字weak,这允许我们使用structsenums作为代理,或者我们将协议更改为以下内容:

protocol FooDelegate: class {
    func doStuff()
}
Run Code Online (Sandbox Code Playgroud)

这允许我们使用weak,但不允许我们使用structsenums.

如果我不使我的协议成为类协议,因此不使用weak我的变量,我正在创建一个保留周期,对吗?

是否有任何可以想象的原因,为什么任何打算用作委托协议的协议不应该是类协议,以便这种类型的变量可以weak

我主要问一下,因为在关于Swift协议的Apple官方文档的委托部分中,它们提供了一个非类协议和一个非弱变量的示例,用作其类的委托:

protocol DiceGameDelegate {
    func gameDidStart(game: DiceGame)
    func game(game: DiceGame, didStartNewTurnWithDiceRoll diceRoll: Int)
    func gameDidEnd(game: DiceGame)
}
Run Code Online (Sandbox Code Playgroud)
class SnakesAndLadders: DiceGame {
    let finalSquare = 25
    let dice = …
Run Code Online (Sandbox Code Playgroud)

protocols swift

9
推荐指数
1
解决办法
2802
查看次数

如何将图像添加到iPhone模拟器?

我已经习惯UIImagePickerControllerUIImagePickerControllerSourceTypePhotoLibrary,但它说"没有照片".

模拟器从哪里获取图像?我应该在哪里复制图像,以便它们显示在模拟器中?

ios-simulator

9
推荐指数
2
解决办法
3701
查看次数

如何创建符合Swift和Objective-C之间共享协议的类方法?

我最近一直在学习Swift.

我决定编写一个混合的Swift/Objective-C应用程序,它使用两种语言实现的相同算法完成计算密集型任务.

该程序计算大量素数.

我定义了一个协议,Swift和Objective-C版本的计算对象都应该符合.

对象都是单例,所以我在Objective-C中创建了一个典型的单例访问方法:

+ (NSObject <CalcPrimesProtocol> *) sharedInstance;
Run Code Online (Sandbox Code Playgroud)

整个协议看起来像这样:

#import <Foundation/Foundation.h>
@class ComputeRecord;

typedef void (^updateDisplayBlock)(void);
typedef void (^calcPrimesCompletionBlock)(void);

    @protocol CalcPrimesProtocol <NSObject>

- (void) calcPrimesWithComputeRecord: (ComputeRecord *) aComputeRecord
              withUpdateDisplayBlock: (updateDisplayBlock) theUpdateDisplayBlock
                  andCompletionBlock: (calcPrimesCompletionBlock) theCalcPrimesCompletionBlock;

    @optional //Without this @optional line, the build fails.
    + (NSObject <CalcPrimesProtocol> *) sharedInstance;

    @end
Run Code Online (Sandbox Code Playgroud)

该类的Objective-C版本完全按照上面的定义实现方法,不用担心.

swift版本有一个方法:

  class func sharedInstance() -> CalcPrimesProtocol
Run Code Online (Sandbox Code Playgroud)

但是,如果我使该方法成为协议的必需方法,我得到编译器错误"类型"CalcPrimesSwift不符合协议'CalcPrimesProtocol'.

但是,如果我在协议中将单例类方法sharedInstance标记为可选,那么它可以工作,我可以在我的Swift类或Objective-C类上调用该方法.

我是否错过了Swift类方法定义中的一些细微之处?考虑到我可以在我的Swift类或Objective-C类上调用sharedInstance()类方法,这似乎不太可能.

您可以从Github下载该项目,如果您愿意,可以查看它.它叫做SwiftPerformanceBenchmark.(链接)

interop objective-c objective-c-protocol swift objective-c-nullability

9
推荐指数
1
解决办法
2319
查看次数

使用Bluez的C/C++ BLE读/写示例

我开始建立一个简单的BLE网络,带有微控制器和覆盆子pi(tardis BLE加密狗).作为一个起点,我正在寻找一个简单的C或C++示例来读/写一个BLE设备,类似于我在命令行上可以做的事情.到目前为止,我发现的例子非常复杂.作为一名BLE初学者,我需要一些非常简单的例子来构建,然后再采用更复杂的设计.我可以像在下面的gatttool示例中那样对BLE设备名称进行硬编码.

以下是我目前使用Bluez命令行选项的方法.

从命令行我可以使用:

$ sudo hcitool lescan
LE Scan ...
BB:A0:50:02:18:07 MyDevice
Run Code Online (Sandbox Code Playgroud)

接下来,我可以使用gatttool在命令行上连接到设备:

$ sudo gatttol -b BB:A0:50:02:18:07 -I
[BB:A0:50:02:18:07][LE]> connect
Attempting to connect to BB:A0:50:02:18:07
Connection successful
Run Code Online (Sandbox Code Playgroud)

最后,我能够使用适当的句柄进行读写

[BB:A0:50:02:18:07][LE]> char-write-req 000f 0100
Characteristic value was written successfully
[BB:A0:50:02:18:07][LE]> char-write-cmd 0011 4C467A
Run Code Online (Sandbox Code Playgroud)

我用于初步研究和开始的一些网站:
http ://people.csail.mit.edu/albert/bluez-intro/c404.html
https://github.com/carsonmcdonald/bluez-experiments/blob/主/实验/ scantest.c

c c++ bluetooth raspberry-pi bluez

9
推荐指数
2
解决办法
2万
查看次数

Swift项目中的链接框架和库

我的iOS应用程序播放声音AVPlayer.要做到这一点,我必须在类的顶部键入以下内容:

import AVFoundation
Run Code Online (Sandbox Code Playgroud)

我来自Objective-C背景,所以我去了Xcode项目的General选项卡,AVFoundation并通过单击Linked框架和库下的加号按钮添加它.黄色工具箱出现在我的项目中.我必须这样做吗?

我试图将它从项目中移除 - 无论是从侧边栏还是在Xcode首选项中,我的应用程序仍然有效并且声音正在播放.那么import为你处理一切吗?

ios swift

9
推荐指数
1
解决办法
1756
查看次数

如何使用函数内部的for-in循环或嵌套函数更改数组的值?

浏览swift 2.0文档,我试着练习一些我在c ++中学到的东西.其中之一就是能够修改我元素中的数组元素,我在swift中遇到了麻烦.

 var scoreOfStudents = [86, 93, 68, 78, 66, 87, 80]

 func returnScoresWithCurve (inout scoresOfClass : [Int]) -> [Int] {
      for var score in scoresOfClass {
          if score < 80 {
              score += 5
          }
      }
      return scoresOfClass
 }
Run Code Online (Sandbox Code Playgroud)

不知道我的错误是什么,因为在for-in循环中,正在添加小于80的分数,但是在我传递的数组中没有被修改.还想知道如何使用嵌套函数而不是for-in循环来做同样的事情.

arrays swift

9
推荐指数
2
解决办法
8149
查看次数

如何创建包含静态库的pod?

我正在努力使我的图书馆作为CocoaPod工作,并希望任何协助指出我正确的方向.

我以前从来没有制作过Pod,我觉得我已经把所有东西都弄好了,这可行......如果它是一个只有未编译的.h/ .m/ .swift文件的简单pod ,但是,我的库包含一个编译过的.a文件,一个静态库,我的库使用.

我在Xcode中的项目被设置为将Objective-C库编译成.a库.如果我在Xcode中编译它,它生成这个文件完全没有问题,但是,当我尝试lint podspec时,我得到链接器错误,似乎与我试图链接到的静态库有关.

SQLConnect.podspec

#
# Be sure to run `pod lib lint NAME.podspec' to ensure this is a
# valid spec and remove all comments before submitting the spec.
#
# To learn more about a Podspec see http://guides.cocoapods.org/syntax/podspec.html
#
Pod::Spec.new do |s|
  s.name                = "SQLConnect"
  s.version             = "1.2.0"
  s.summary             = "Connects apps to SQL Server"
  s.description         = <<-DESC
                            A library for connecting Objective-C & Swift apps …
Run Code Online (Sandbox Code Playgroud)

objective-c cocoapods podspec

9
推荐指数
1
解决办法
1140
查看次数

什么是CocoaPods"(未使用)"

运行后pod outdated,我得到以下输出

Updating spec repo `master`
Analyzing dependencies
The following pod updates are available:
- AFNetworking 2.4.4 -> 2.5.4 (latest version 3.0.0-beta.2)
- HexColors 2.2.1 -> 2.2.1 (latest version 3.0.0)
- Overcoat 3.0.0 -> (unused) (latest version 3.2.1)
- ReactiveCocoa 2.5 -> 2.5 (latest version 4.0.4-alpha-4)
Run Code Online (Sandbox Code Playgroud)

我之前没有见过这个"未使用"的术语

Overcoat 3.0.0 ->(没用过) (latest version 3.2.1)

这是什么?这是什么意思?

ios cocoapods

9
推荐指数
1
解决办法
966
查看次数

创建自定义UITableView分隔线

我想创建一个像这样的分隔线:

在此输入图像描述

有关如何实现它的任何想法?我尝试获取该行的图像并使用UIAppearance代理对象:

[[UITableView appearanceWhenContainedIn:[MyController class], nil] setSeparatorColor:
[UIColor colorWithPatternImage:[UIImage imageNamed:@"line.png"]]];
[[UITableView appearanceWhenContainedIn:[MyController class], nil] setSeparatorStyle:UITableViewCellSeparatorStyleSingleLine];
Run Code Online (Sandbox Code Playgroud)

但是,不知何故,只有黑线被渲染.

uitableview uikit ios uiappearance

8
推荐指数
2
解决办法
1万
查看次数