我正在尝试UITextFieldDelegate
使用协议扩展在某些方法上添加默认行为,如下所示:
extension ViewController: UITextFieldDelegate {
// Works if I uncommented this so I know delegates are properly set
// func textFieldShouldReturn(textField: UITextField) -> Bool {
// textField.resignFirstResponder()
// return true
// }
}
extension UITextFieldDelegate {
func textFieldShouldReturn(textField: UITextField) -> Bool {
textField.resignFirstResponder()
return true
}
}
Run Code Online (Sandbox Code Playgroud)
你可能猜到,键盘永远不会消失.我真的不知道这里的问题在哪里.这是语言限制吗?有人已经成功做到了吗?
编辑:
正如@Logan建议的那样,默认协议的方法实现不适用于标记为的协议@objc
.但是,UITextFieldDelegate
有以下签名public protocol UITextFieldDelegate : NSObjectProtocol {...}
我测试默认实现NSObjectProtocol
,它似乎工作正常:
protocol Toto: NSObjectProtocol {
func randomInt() -> Int
}
extension Toto {
func randomInt() -> …
Run Code Online (Sandbox Code Playgroud) 我是RxSwift的初学者,我试着从一个简单的登录屏幕开始.所以我有2个文本字段和一个登录按钮,它绑定到一个PublishSubject
所以每次点击按钮时,我都会发送网络请求来执行身份验证.
由于身份验证可能会失败,Driver
因此我每次单击按钮都可以重播我的请求.
我有2个版本,我认为是相同的代码,但一个工作,一个不.我试图了解幕后发生的事情.
这是第一个有效的版本(每次触摸按钮时请求):
let credentials = Driver.combineLatest(email.asDriver(), password.asDriver()) { ($0, $1) }
self.signIn = signInTaps
.asDriver(onErrorJustReturn: ())
.withLatestFrom(credentials)
.flatMapLatest { email, password in // returns Driver<Result<AuthenticateResponse, APIError>>
return provider.request(.Authenticate(email: email, password: password))
.filterSuccessfulStatusCodes()
.mapObject(AuthenticateResponse)
.map { element -> Result<AuthenticateResponse, APIError> in
return .Success(element)
}
.asDriver { error in
let e = APIError.fromError(error)
return Driver<Result<AuthenticateResponse, APIError>>.just(.Failure(e))
}
.debug()
}
Run Code Online (Sandbox Code Playgroud)
这是一个不起作用的(请求只在第一次点击时触发):
let credentials = Observable.combineLatest(email.asObservable(), password.asObservable()) { ($0, $1) }
self.signIn = signInTaps.asObservable()
.withLatestFrom(c)
.flatMapLatest { email, …
Run Code Online (Sandbox Code Playgroud) 我想在我的单元格上添加一个与刷卡到删除功能相同的自定义按钮.所以当点击我的自定义按钮时,这个将被隐藏,让我们出现官方的红色"删除"按钮.
所以我做了类似的事情:
/// Controller.m
///
/// @brief Delete icon button pressed. Trigger display of Delete full button
///
- (IBAction)deleteDrug:(id)sender event:(id)event {
NSIndexPath *indexPath = [self indexPathForButton:sender event:event];
UITableViewCell *cell = [self.tableView cellForRowAtIndexPath:indexPath];
[cell setEditing:YES animated:YES];
}
/// CustomCell.m
- (void)setEditing:(BOOL)editing animated:(BOOL)animated {
[super setEditing:editing animated:animated];
// hide / show "modify" button when entering in edit mode
switch (editing) {
case YES:
self.deleteButton.hidden = YES;
break;
case NO:
self.deleteButton.hidden = NO;
break;
default:
break;
}
}
Run Code Online (Sandbox Code Playgroud)
此时,我的自定义按钮在点击它们时会隐藏,但官方的红色"删除"按钮没有出现.
有人知道如何处理这个?
我正在研究MAMP phpMyAdmin,一切顺利,直到我ALTER TABLE
从SQL选项卡查询语句.操作太长了,所以我决定刷新我的页面.从这时起,我再也无法访问phpMyAdmin了,我总是有这样的消息:
#2002 - Can't connect to local MySQL server through socket '/Applications/MAMP/tmp/mysql/mysql.sock' (2)
Run Code Online (Sandbox Code Playgroud)
我在网上尝试了很多东西,包括Stackoverflow,Server Fault,...比如重新安装MAMP,符号链接/tmp/mysql.sock
,修改config.inc.php
等,但没有任何效果.
从命令行运行时一切都很好mysql
:
$ /Applications/MAMP/Library/bin/mysql -u root -p
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 3
Server version: 5.5.29 Source distribution
mysql> SHOW SCHEMAS;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
+--------------------+
3 rows in set (0,65 sec)
Run Code Online (Sandbox Code Playgroud)
mysqld
运行正常:
$ …
Run Code Online (Sandbox Code Playgroud) 我正在尝试在执行异步请求时显示活动指示器。我所做的是创建一个 ActivityTracker 对象来跟踪发布者的生命周期。这个 ActivityTracker 是一个 ObservableObject 并将存储在视图模型中,它也是一个 ObservableObject。
似乎这种设置并没有刷新视图。这是我的代码:
struct ContentView: View {
@ObservedObject var viewModel = ContentViewModel()
var body: some View {
VStack(spacing: 16) {
Text("Counter: \(viewModel.tracker.count)\nPerforming: \(viewModel.tracker.isPerformingActivity ? "true" : "false")")
Button(action: {
_ = request().trackActivity(self.viewModel.tracker).sink { }
}) {
Text("Request")
}
}
}
}
class ContentViewModel: ObservableObject {
@Published var tracker = Publishers.ActivityTracker()
}
private func request() -> AnyPublisher<Void, Never> {
return Just(()).delay(for: 2.0, scheduler: RunLoop.main)
.eraseToAnyPublisher()
}
extension Publishers {
final class ActivityTracker: ObservableObject {
// …
Run Code Online (Sandbox Code Playgroud) 我需要XCTest
单独测试()我的一些方法,包括对CoreData模型的引用.
以下行正确执行:
var airport: AnyObject! = Airport.MR_createEntity()
(lldb) po airport <Airport: 0x7fcf54216940> (entity: Airport; id: 0x7fcf54216a20 <x-coredata:///Airport/t1D3D08DA-70F9-4DA0-9487-BD6047EE93692> ; data: {
open = nil;
shortName = nil;
visible = nil; })
Run Code Online (Sandbox Code Playgroud)
而以下行触发EXC_BAD_ACCESS
:
var airport2: Airport = Airport.MR_createEntity() as! Airport
(lldb) po airport2
error: Execution was interrupted, reason: EXC_BAD_ACCESS (code=1, address=0x0).
The process has been returned to the state before expression evaluation.
Run Code Online (Sandbox Code Playgroud)
我的主要目标没有出现此错误的迹象.配置是:两个目标中的模型对象,前缀为@objc(MyModel)
类,在我的类中的模型中没有命名空间xcdatamodel
知道这里发生了什么吗?
在我更新XCode以获得iOS 6 SDK之后,我发现iAd不再在模拟器上加载了.我暂时无法试用真正的设备,因为我还没有更新我的iPhone.
我在发行说明中没有找到任何关于它的内容.
有人遇到同样的问题并解决了吗?
自iOS 6发布以来,有一些不推荐使用的iAd属性和方法如下:
currentContentSizeIdentifier
requiredContentSizeIdentifiers
ADBannerContentSizeIdentifierPortrait
ADBannerContentSizeIdentifierLandscape
Run Code Online (Sandbox Code Playgroud)
那么现在在两个方向上实施iAd的最佳方式是什么?我们现在应该手动调整横幅视图框的大小吗?
我试图得到一个像这样的函数的引用:
class Toto {
func toto() { println("f1") }
func toto(aString: String) { println("f2") }
}
var aToto: Toto = Toto()
var f1 = aToto.dynamicType.toto
Run Code Online (Sandbox Code Playgroud)
我有以下错误: Ambiguous use of toto
如何获取具有指定参数的函数?
我正在使用具有以下功能的Observer
API(ObserverSet):
public func add<T: AnyObject>(object: T, _ f: T -> Parameters -> Void) -> ObserverSetEntry<Parameters>
Run Code Online (Sandbox Code Playgroud)
它只是注册一个object
然后调用实例方法f
的object
通知时,触发器
在我的一位经理中,我需要隐藏前一个函数,因此我可以强制观察者调用通过协议实现的预定义函数.
这是我到目前为止所做的:
@objc protocol Observer : NSObjectProtocol {
func observe(param: String) -> Void
}
func addObserver<T: AnyObject where T: Observer>(observer: T) {
let f: T -> String -> Void = observer.dynamicType.observe
entries.addObserver(observer, f)
}
Run Code Online (Sandbox Code Playgroud)
不幸的是,我出现以下错误 Partial application of generic method is not allowed
我在SO上找到了一个可能的解决方法,看起来像这样:
let f: T -> String -> Void = { (obs: …
Run Code Online (Sandbox Code Playgroud) ios ×8
swift ×6
iad ×2
ios6 ×2
combine ×1
core-data ×1
currying ×1
deprecated ×1
dynamictype ×1
function ×1
generics ×1
mamp ×1
mysql ×1
objective-c ×1
phpmyadmin ×1
protocols ×1
rx-swift ×1
simulator ×1
sockets ×1
swiftui ×1
uitableview ×1
unit-testing ×1