小编Yam*_*man的帖子

swift 2.0 - UITextFieldDelegate协议扩展无法正常工作

我正在尝试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)

protocols ios uitextfielddelegate swift

20
推荐指数
1
解决办法
4982
查看次数

RxSwift - 误解了一些概念

我是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)

ios swift rx-swift

18
推荐指数
1
解决办法
3160
查看次数

以编程方式触发UITableViewCell"删除"按钮

我想在我的单元格上添加一个与刷卡到删除功能相同的自定义按钮.所以当点击我的自定义按钮时,这个将被隐藏,让我们出现官方的红色"删除"按钮.

所以我做了类似的事情:

/// 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)

此时,我的自定义按钮在点击它们时会隐藏,但官方的红色"删除"按钮没有出现.

有人知道如何处理这个?

uitableview ios

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

MAMP - phpMyAdmin#2002 - 无法通过socket'/Applications/MAMP/tmp/mysql/mysql.sock'连接到本地MySQL服务器

我正在研究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)

mysql sockets mamp phpmyadmin

11
推荐指数
1
解决办法
3万
查看次数

ObservableObject 内的 ObservedObject 不刷新视图

我正在尝试在执行异步请求时显示活动指示器。我所做的是创建一个 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)

ios swift swiftui combine

11
推荐指数
2
解决办法
2589
查看次数

swift - 单元测试CoreData(+ MagicalRecord)模型触发EXC_BAD_ACCESS

我需要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

知道这里发生了什么吗?

unit-testing core-data ios magicalrecord swift

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

iOS 6 iad没有在模拟器中显示

在我更新XCode以获得iOS 6 SDK之后,我发现iAd不再在模拟器上加载了.我暂时无法试用真正的设备,因为我还没有更新我的iPhone.

我在发行说明中没有找到任何关于它的内容.

有人遇到同样的问题并解决了吗?

simulator ios iad ios6

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

iOS 6 iAd属性和方法已弃用

自iOS 6发布以来,有一些不推荐使用的iAd属性和方法如下:

currentContentSizeIdentifier
requiredContentSizeIdentifiers
ADBannerContentSizeIdentifierPortrait
ADBannerContentSizeIdentifierLandscape
Run Code Online (Sandbox Code Playgroud)

那么现在在两个方向上实施iAd的最佳方式是什么?我们现在应该手动调整横幅视图框的大小吗?

deprecated ios iad ios6

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

Swift - 获取具有相同名称但参数不同的函数的引用

我试图得到一个像这样的函数的引用:

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

如何获取具有指定参数的函数?

function objective-c dynamictype swift

6
推荐指数
1
解决办法
1117
查看次数

具有泛型的部分函数应用

我正在使用具有以下功能的ObserverAPI(ObserverSet):

public func add<T: AnyObject>(object: T, _ f: T -> Parameters -> Void) -> ObserverSetEntry<Parameters>
Run Code Online (Sandbox Code Playgroud)

它只是注册一个object然后调用实例方法fobject通知时,触发器

在我的一位经理中,我需要隐藏前一个函数,因此我可以强制观察者调用通过协议实现的预定义函数.

这是我到目前为止所做的:

@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)

generics currying partial-application ios swift

6
推荐指数
1
解决办法
1122
查看次数