当我编写测试时,我可以做:
@testable import TestProduct
Run Code Online (Sandbox Code Playgroud)
以上与将测试文件添加到特定目标有何不同?
最终,我的问题是:我是否已将unitTests设为所有文件的目标……是否等同于这样做:
@testable import TestProduct
Run Code Online (Sandbox Code Playgroud)
如果没有,那有什么区别?
我正在开发一个为每个应用程序功能创建模块的应用程序。我必须从一个模块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。请让我知道是否需要进一步解释我的问题。
我能够在模拟器中测试普通通知,但是当我尝试测试丰富的通知时,没有任何反应,事件标题没有更新。
你能帮我吗,如何继续。我需要更改任何模拟器设置吗?我正在使用 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
使用 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协议。我如何将其身份实现为它的suit和rank(仅创建一次)的唯一组合?本质上,它的身份可以是“黑桃-1”或“钻石杰克”。此外,如果可能的话,我希望将 保留rank为一种Int类型,以便稍后进行算术运算。先感谢您!
我正在寻找一个干净的解决方案来解决这个 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而不是未包装的 …
我viewDidLoad在视图控制器中被调用两次.一旦通过[UIViewController View],并通过第二次[UINib instanciateWithOwner:Options].为什么会这样?可以预防吗?
谢谢
uiviewcontroller uikit viewdidload ios viewcontroller-lifecyle
我正在创建一个应用程序,告诉用户他们是否在目的地附近.我正在计算currentLocation目的地之间的距离.我在里面做计算didUpdateLocations.它正在工作但我已经看到有一些方法可以解决这个问题,而无需进行任何数学运算.
我正在注册该地区CLLocationManager; 但似乎这些方法didExitRegion并didEnterRegion没有被调用.
以下是我注册区域的代码部分:
- (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
我正在编写一个移动iOS应用程序,它使用iOS重要位置更改服务来管理大量地理围栏,在我们从CoreLocation Framework收到此消息时启用和禁用地理围栏.
在Apple开发者网站上,它说:
重要更改位置服务仅在设备位置发生重大变化(例如500米或更长)时才会提供更新.
真正让我失望的是"500米或更多",究竟什么是重要的位置变更服务,我们实际拥有什么保证?
此API是否可靠地跟踪区域之间的变化,以便在收到消息时我们知道是时候重新分配我们的地理围栏(假设我们每500米半径的地理围栏少于20个)?
由于共享单例实例将始终存在,我们是否可以安全地使用[unowned self]该单例类中的所有闭包?
singleton memory-management reference-counting swift unowned-references
我为这样的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 ×6
swift ×6
xcode ×2
avplayer ×1
clregion ×1
delegates ×1
hashable ×1
identifiable ×1
identity ×1
location ×1
singleton ×1
swift2 ×1
swiftui ×1
uikit ×1
unit-testing ×1
unnotificationserviceextension ×1
viewdidload ×1
xcode11.4 ×1