假设这样的设置:
在Playground中,可以导入UIKit
与import
关键字一样的模块(框架).如何从Playground启用对项目其他类的访问?
只是尝试直接访问项目类会产生错误消息: 使用未解析的标识符"MyView"
有没有办法(暂时)禁用自动布局错误/警告消息:
Unable to simultaneously satisfy constraints.
Probably at least one of the constraints in the following list is one you don't want. Try this: (1) look at each constraint and try to figure out which you don't expect; (2) find the code that added the unwanted constraint or constraints and fix it. (Note: If you're seeing NSAutoresizingMaskLayoutConstraints that you don't understand, refer to the documentation for the UIView property translatesAutoresizingMaskIntoConstraints)
(
"<NSLayoutConstraint:0x170098420 H:[UIView:0x15c62c100(2)]>",
"<NSLayoutConstraint:0x170098600 UIView:0x15c6294f0.leading == UIView:0x15c628d40.leadingMargin - 8>",
"<NSLayoutConstraint:0x170098650 …
Run Code Online (Sandbox Code Playgroud) 假设一个派生自UIView
以下的类:
class MyView: UIView {
var myImageView: UIImageView
init(frame: CGRect) {
super.init(frame: frame)
}
init(coder aDecoder: NSCoder!) {
super.init(coder: aDecoder)
}
...
Run Code Online (Sandbox Code Playgroud)
如果我想在两个初始化器中使用相同的代码,例如
self.myImageView = UIImageView(frame: CGRectZero)
self.myImageView.contentMode = UIViewContentMode.ScaleAspectFill
Run Code Online (Sandbox Code Playgroud)
并且在类实现中不重复该代码两次,我将如何构造init
方法?
尝试的方法:
func commonInit()
在调用之后调用的方法super.init
- > Swift编译器myImageView
在调用之前给出了一个关于未初始化变量的错误super.init
func commonInit()
之前的调用super.init
失败是显而易见的,编译器错误"'self'在super.init调用之前使用"我试图找出如何计算今日扩展主视图中的左边距,以将内容与今日视图标签的其余部分对齐.
这是一个使用Today扩展的干净Xcode项目的示例(我已经为视图背景添加了颜色并绘制了一条红色虚线,以说明我想要对齐Hello World的位置UILabel
).
iPhone 6 Plus模拟器(左侧横向,右侧纵向)的结果可以从下图中找到:
在图像中,请注意绿色主视图左边界的位置与应用程序名称UILabel
"testi2"的位置不同.看起来红线 - 主视图左边界对齐在每个设备中都有所不同:iPhone 5x,iPhone 6和iPad.
可以使用干净的Xcode项目(我正在使用Xcode 6.1.1,iOS 8.1和Swift)重现该行为:
UILabel
背景为红色:
如何将Hello World UILabel
(红色背景)与虚线对齐?或者如何将主视图(绿色背景)与虚线对齐?
我有一个应用需要检测运行相同应用程序和iOS 7.1的附近(蓝牙LE范围内)设备.我考虑了两种检测方法:
看来选项1是不可能的,因为:
方案2似乎要走了,但实施方面存在一些困难:
关于这一点,我有以下问题:
如何从用户启动和以编程方式更改UITextField
text
属性获得信号?通过continuousTextValues
仅在用户启动更改时使用报告信号.如果以textField.text
编程方式设置,则不会触发信号.
这就是我使用的方式continuousTextValues
:
textField.reactive.continuousTextValues.observeValues { value in
print("Value: \(value)")
}
Run Code Online (Sandbox Code Playgroud)
如果我text
手动设置它不会被触发:
textField.text = "Test"
Run Code Online (Sandbox Code Playgroud) uitextfield reactive-cocoa swift reactive-cocoa-5 reactive-swift
可以使用 Snowflake变量来确定源表,如下所示:
set src='some_table';
select count(*) from $src;
Run Code Online (Sandbox Code Playgroud)
但是,我正在寻找一种方法来提供数据库名称作为变量并将其与表名称连接起来。伪代码:
set db='database';
select count(*) from $db.table_name;
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点?我想保留database
并table_name
分开(所以设置dbandtable=database.table_name
不是一个选项)。
假设一个单例类具有有关登录状态的枚举,如下所示:
@Published var loginState: LoginState = .unknown
Run Code Online (Sandbox Code Playgroud)
@ObservedObject
单例类实例在视图中被指定为 an ,以获取其他@Published
变量的更改,如下所示:
struct LoginView: View {
@ObservedObject var loginDelegate = Singleton.shared
Run Code Online (Sandbox Code Playgroud)
loginState
当单例设置为特定枚举情况(例如)时,如何使用类似以下内容在视图中触发警报.error
?
}.alert(isPresented: <something> ) { ... }
Run Code Online (Sandbox Code Playgroud) Snowflake 似乎默认为某个太平洋时区。我想使用 EET 作为默认时区。有没有办法在系统范围或每个用户范围内设置它?
我有一个场景,我有两个UITableViews作为主UIView中的子视图:
UIView(帧=全屏)
+ --- UITableView(帧=屏幕的〜1/3)
+ --- UITableView(帧=屏幕的第二~1/3)
我想检测整个屏幕区域上的三个手指向上滑动(并且还允许用户使用至少一个手指上下平移UITableViews).
我有一个附加到UIView的UISwipeGestureRecognizer numberOfTouchesRequired = 3
.
我试过这些:
maximumNumberOfTouches
在两个UITableViews 上将内部UIPanGestureRecognizer设置为1.根据我的理解,这应该可以防止UITableViews上有两个和三个手指平底锅,但事实并非如此.(如果我enabled
在这些UIPanGestureRecognizers上设置为NO,则触摸被正确传递给superview.但是平移/滚动不起作用.)panGestureRecognizer requireGestureRecognizerToFail:
我UISwipeGestureRecognizer
.这部分工作,但平移等待直到滑动没有完成,它感觉非常笨拙.shouldRecognizeSimultaneouslyWithGestureRecognizer:
为返回YES,这允许我检测三指滑动.但是,下面的UITableViews无意中向上/向上滚动.那么如何将平移触摸次数限制为1(或2)并让三指UISwipeGestureRecognizer识别三次手指滑动?
看来,火力地堡的iOS实现不支持客户端模式的离线缓存.这在实践中意味着什么:
这里的问题是,如果您使用Firebase实现,例如消息传递应用程序,您很可能希望在与后端服务器的实际连接之前向用户显示消息线程和消息的先前缓存版本成立.
我假设正确的实现需要处理:
有没有人想出一个解决方案(自己的或第三方)来实现2)和3)?
以下是来自HockeyApp的示例,它生成以下代码:
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
BITHockeyManager.sharedHockeyManager().configureWithIdentifier(API_KEY)
BITHockeyManager.sharedHockeyManager().disableCrashManager = true
BITHockeyManager.sharedHockeyManager().startManager()
BITHockeyManager.sharedHockeyManager().authenticator.authenticateInstallation()
return true
}
Run Code Online (Sandbox Code Playgroud)
注意BITHockeyManager.sharedHockeyManager()
每次通话中的重复.我正在寻找一种类似(伪代码)的语法:
with BITHockeyManager.sharedHockeyManager() do {
.configureWithIdentifier(API_KEY)
.disableCrashManager = true
.startManager()
.authenticator.authenticateInstallation()
}
Run Code Online (Sandbox Code Playgroud)
有没有办法在Swift中这样做?
编辑:在写完这个问题后,我注意到Alamofire正在使用"可链接的方法",这实际上是我原本想要的.这允许一个简洁的语法,如下(来自http://nshipster.com/alamofire/的代码):
Alamofire.request(.GET, "http://httpbin.org/get")
.response { (request, response, data, error) in
println(request)
println(response)
println(error)
}
Run Code Online (Sandbox Code Playgroud)
要在HockeyApp中使用相应的语法,需要修改BITHockeyManager
类.
ios ×8
swift ×5
iphone ×2
snowflake-cloud-data-platform ×2
autolayout ×1
bluetooth ×1
firebase ×1
ios8 ×1
ipad ×1
objective-c ×1
offline ×1
swiftui ×1
uitableview ×1
uitextfield ×1
xcode ×1