我有一个项目使用@IBDesignable来控制Storyboard中的视图属性,一切正常.但是,如果我按照此处所述集成pod并添加桥接文件(https://medium.com/swift-programming/swift-cocoapods-da09d8ba6dd2),则Storyboard不再正确显示.它在我使用@IBDesignable进行自定义视图的位置显示一个空白视图.pod正常工作,我无法在Storyboard中看到我的更改.还原我的更改并删除pod,解决了这个问题?
反正有没有使用CocoaPods和@IBDesignable,或者这只是Xcode6中的一个错误?
具体来说,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,这允许我们使用structs和enums作为代理,或者我们将协议更改为以下内容:
protocol FooDelegate: class {
func doStuff()
}
Run Code Online (Sandbox Code Playgroud)
这允许我们使用weak,但不允许我们使用structs或enums.
如果我不使我的协议成为类协议,因此不使用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) 我已经习惯UIImagePickerController了UIImagePickerControllerSourceTypePhotoLibrary,但它说"没有照片".
模拟器从哪里获取图像?我应该在哪里复制图像,以便它们显示在模拟器中?
我最近一直在学习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
我开始建立一个简单的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
我的iOS应用程序播放声音AVPlayer.要做到这一点,我必须在类的顶部键入以下内容:
import AVFoundation
Run Code Online (Sandbox Code Playgroud)
我来自Objective-C背景,所以我去了Xcode项目的General选项卡,AVFoundation并通过单击Linked框架和库下的加号按钮添加它.黄色工具箱出现在我的项目中.我必须这样做吗?
我试图将它从项目中移除 - 无论是从侧边栏还是在Xcode首选项中,我的应用程序仍然有效并且声音正在播放.那么import为你处理一切吗?
浏览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循环来做同样的事情.
我正在努力使我的图书馆作为CocoaPod工作,并希望任何协助指出我正确的方向.
我以前从来没有制作过Pod,我觉得我已经把所有东西都弄好了,这可行......如果它是一个只有未编译的.h/ .m/ .swift文件的简单pod ,但是,我的库包含一个编译过的.a文件,一个静态库,我的库使用.
我在Xcode中的项目被设置为将Objective-C库编译成.a库.如果我在Xcode中编译它,它生成这个文件完全没有问题,但是,当我尝试lint 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) 运行后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)
这是什么?这是什么意思?
我想创建一个像这样的分隔线:

有关如何实现它的任何想法?我尝试获取该行的图像并使用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)
但是,不知何故,只有黑线被渲染.
swift ×5
cocoapods ×3
ios ×3
objective-c ×2
arrays ×1
bluetooth ×1
bluez ×1
c ×1
c++ ×1
interop ×1
podspec ×1
protocols ×1
raspberry-pi ×1
uiappearance ×1
uikit ×1
uitableview ×1
xcode6 ×1