小编Hon*_*ney的帖子

将目标导入单元测试并将该文件包括在目标成员资格之间有什么区别?

当我编写测试时,我可以做:

@testable import TestProduct
Run Code Online (Sandbox Code Playgroud)

以上与将测试文件添加到特定目标有何不同?

在此处输入图片说明

最终,我的问题是:我是否已将unitTests设为所有文件的目标……是否等同于这样做:

@testable import TestProduct
Run Code Online (Sandbox Code Playgroud)

如果没有,那有什么区别?

xcode unit-testing swift

4
推荐指数
1
解决办法
738
查看次数

'textFieldDidBeginEditing'与Swift中协议'UITextFieldDelegate'的可选要求'textFieldDidBeginEditing'几乎匹配

我正在开发一个为每个应用程序功能创建模块的应用程序。我必须从一个模块UI控制器切换到另一个模块UI控制器。

我在模块中有UIController,并将该控制器标记为公共访问标识符,如下所示

public class InterAccountTransferViewController: UIViewController {
   override public func viewDidLoad() {
    ......
    ......
   }
}
Run Code Online (Sandbox Code Playgroud)

上面的类还实现了扩展中的UITextField委托。当我将上述类创建为“开放访问”时,我在TextField委托上收到警告,如下所示

实例方法“ textFieldDidBeginEditing”几乎与协议“ UITextFieldDelegate”的可选要求“ textFieldDidBeginEditing”匹配

在此处输入图片说明

现在不调用文本字段委托。当我试图通过将代表设置为私人身份来关闭警告时,仍然没有调用他们。

请让我知道如何使这些警告静音并同时致电代表。

任何想法或建议都很好。我正在使用Swift 4.2开发Xcode 10。请让我知道是否需要进一步解释我的问题。

delegates access-modifiers compiler-warnings ios swift

4
推荐指数
1
解决办法
759
查看次数

在模拟器中测试丰富的通知

我能够在模拟器中测试普通通知,但是当我尝试测试丰富的通知时,没有任何反应,事件标题没有更新。

你能帮我吗,如何继续。我需要更改任何模拟器设置吗?我正在使用 Xcode 11.4

示例有效负载:

{
    "aps": {
        "mutable-content": 1,
        "alert": {
            "body": "Push notification body",
            "title": "Push notification title"
        }
    },
    "media-url": "https://i.imgur.com/t4WGJQx.jpg"
}
Run Code Online (Sandbox Code Playgroud)

通知服务扩展方法:

- (void)didReceiveNotificationRequest:(UNNotificationRequest *)request withContentHandler:(void (^)(UNNotificationContent * _Nonnull))contentHandler {
     self.contentHandler = contentHandler;
     self.bestAttemptContent = [request.content mutableCopy];
    
    self.bestAttemptContent.title = [NSString stringWithFormat:@"%@ [modified]",
    self.bestAttemptContent.title];
}
Run Code Online (Sandbox Code Playgroud)

xcode apple-push-notifications ios-simulator unnotificationserviceextension xcode11.4

4
推荐指数
1
解决办法
1181
查看次数

如何使用两个枚举变量实现 Identifiable

使用 Swift 5.3,如何Identifiable通过使其身份取决于两个枚举变量的组合来在结构上实现协议?

有问题的代码很简单,

struct Card: Identifiable {
    let suit: Suit
    let rank: Rank
    
    enum Suit {
        case spades, clubs, diamonds, hearts
    }
    
    enum Rank: Int {
        case one = 1, two, three, four, five, six, seven, jack, queen, king
    }
}
Run Code Online (Sandbox Code Playgroud)

上面的结构体还不符合Identifiable协议。我如何将其身份实现为它的suitrank(仅创建一次)的唯一组合?本质上,它的身份可以是“黑桃-1”或“钻石杰克”。此外,如果可能的话,我希望将 保留rank为一种Int类型,以便稍后进行算术运算。先感谢您!

identity hashable swift swift-protocols identifiable

4
推荐指数
1
解决办法
681
查看次数

当应用于 Binding 时,在 SwiftUI 中展开可选的 @State

我正在寻找一个干净的解决方案来解决这个 SwiftUI 挑战。

以下代码可以编译,但无法工作,因为@State属性超出了ContentView范围。

import SwiftUI

struct ContentView: View {
  var state: LocalState?
  
  var body: some View {
    if let state = state {
      Toggle("Toggle", isOn: state.$isOn)
    }
  }
}

extension ContentView {
  struct LocalState {
    @State var isOn: Bool
  }
}

struct ContentView_Previews: PreviewProvider {
  static var previews: some View {
    VStack {
      ContentView(
        state: .init(isOn: false)
      )
      .border(Color.red)
      
      ContentView()
        .border(Color.red)
    }
    
  }
}
Run Code Online (Sandbox Code Playgroud)

由于以下原因,以下代码无法编译:

可选类型“ContentView.LocalState?”的值 必须展开以引用包装基类型“ContentView.LocalState”的成员“isOn”

似乎是$$state.isOn原件state而不是未包装的 …

ios swift swiftui

4
推荐指数
1
解决办法
880
查看次数

viewDidLoad被调用两次

viewDidLoad在视图控制器中被调用两次.一旦通过[UIViewController View],并通过第二次[UINib instanciateWithOwner:Options].为什么会这样?可以预防吗?

谢谢

uiviewcontroller uikit viewdidload ios viewcontroller-lifecyle

3
推荐指数
2
解决办法
8213
查看次数

Geofencing iOS 6

我正在创建一个应用程序,告诉用户他们是否在目的地附近.我正在计算currentLocation目的地之间的距离.我在里面做计算didUpdateLocations.它正在工作但我已经看到有一些方法可以解决这个问题,而无需进行任何数学运算.

我正在注册该地区CLLocationManager; 但似乎这些方法didExitRegiondidEnterRegion没有被调用.

以下是我注册区域的代码部分:

- (void)searchBarSearchButtonClicked:(UISearchBar *)searchBar
{
    [self.locationManager startUpdatingLocation];
    [self.mySearchBar resignFirstResponder];
    [[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:YES];

    self.distToRemind = 0;

    [worldMap removeAnnotations:[worldMap annotations]];
    NSLog(@"executou de primeira");

    CLGeocoder *geocoder = [[CLGeocoder alloc] init];
        [geocoder geocodeAddressString:[self.mySearchBar text] completionHandler:^(NSArray *placemarks, NSError *error)
         {
             CLPlacemark *placemark = [placemarks lastObject];

             //test
             //DefaultAnnotation *annot = [[DefaultAnnotation alloc] initWithCoordinate:placemark.location.coordinate andTitle:@""];
             CLRegion *newRegion = [[CLRegion alloc] initCircularRegionWithCenter:placemark.location.coordinate radius:10.0 identifier:@"RegionBoundary"];

             DefaultAnnotation *regionAnnotation = [[DefaultAnnotation alloc] initWithCoordinate:newRegion.center andTitle:@""];

             [self identifyPlacemark:placemark andSetAnnotation:regionAnnotation];

             MKCoordinateRegion …
Run Code Online (Sandbox Code Playgroud)

core-location cllocationmanager ios clregion region-monitoring

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

重大的位置变化 - 我们有什么保证?

我正在编写一个移动iOS应用程序,它使用iOS重要位置更改服务来管理大量地理围栏,在我们从CoreLocation Framework收到此消息时启用和禁用地理围栏.

在Apple开发者网站上,它说:

重要更改位置服务仅在设备位置发生重大变化(例如500米或更长)时才会提供更新.

真正让我失望的是"500米或更多",究竟什么是重要的位置变更服务,我们实际拥有什么保证?

此API是否可靠地跟踪区域之间的变化,以便在收到消息时我们知道是时候重新分配我们的地理围栏(假设我们每500米半径的地理围栏少于20个)?

location core-location cllocationmanager ios

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

对于Swift单身人士,总是使用[无主自我]安全吗?

由于共享单例实例将始终存在,我们是否可以安全地使用[unowned self]该单例类中的所有闭包?

singleton memory-management reference-counting swift unowned-references

3
推荐指数
2
解决办法
876
查看次数

在Swift中出现"func observeValueForKeyPath(keyPath:NSString,object:AnyObject,change:NSDictionary,context:Void)"

我为这样的AVPlayer添加了一个观察者

self.audioPlayer.addObserver(self, forKeyPath: "currentItem.status", options: [NSKeyValueObservingOptions.New, NSKeyValueObservingOptions.Initial], context: nil)
Run Code Online (Sandbox Code Playgroud)

并呼吁

func observeValueForKeyPath(keyPath : NSString, object : AnyObject, change : NSDictionary, context : Void) {
    if object as! AVPlayer == self.audioPlayer && keyPath.isEqualToString("currentItem.status")
    {
        let playerStatus = self.audioPlayer.currentItem!.status.rawValue as Int
        if playerStatus == AVPlayerStatus.Failed.rawValue
        {
            self.replaceCurrentItem(self.fileName)
        }
        else if playerStatus == AVPlayerStatus.ReadyToPlay.rawValue
        {
            self.playAudio()
            self.updateDurationPeriodcally()
            self.updateInfo()
        }
        else if playerStatus == AVPlayerStatus.Unknown.rawValue
        {
            print("\(self.audioPlayer.currentItem!.error)")
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

问题是observeValueForKeyPath永远不会被称为.

整个代码

func loadPlayer (urlString : NSString)
{
    let url : NSURL …
Run Code Online (Sandbox Code Playgroud)

ios avplayer swift swift2

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